首页 > 解决方案 > 类引用的打字稿导出类型

问题描述

我正在尝试定义一个其他团队成员在定义代码模块时可以遵守的接口,这样一些消耗的代码可以对模块做出假设,并且任何新模块只需要遵守(或多或少)中的接口订单添加到系统中。

例如,假设我有一个目录Foo,可以从中导出以下内容index.ts

import * as propertyC from './propertyC'

export const foo:IModule = {
    propertyA: value,
    propertyB: value,
    propertyC
}

propertyC以上进口1个或多个类。我希望能够将 propertyC 定义为对构造函数(而不是实例)的引用,并且能够让 IDE 知道哪些类是为了让生活更轻松。我可以定义IModule为:

interface IModule {
    propertyA: MyTypeA;
    propertyB: MyTypeB;
    propertyC: {
      [source:string]: typeof MyClass
    };
}

但是,当我想打电话时new foo.propertyC.MyClass() foo.propertyC,不知道存在哪些类propertyC。在我的测试中,这似乎是我定义的索引签名的一个缺点(这是有道理的)。我也玩过泛型并尝试将某种类型传递给IModule但没有任何运气。

我想让任何消费代码知道存在哪些类,propertyC同时还允许propertyC包含依赖于模块导出的不同类(但它始终是类构造函数)。

有可能实现我所追求的吗?

标签: typescript

解决方案


如果我理解正确,您可以通过使用导入来完成这项typeof工作propertyC

import * as propertyC from "./propertyC"

interface IModule {
    propertyA: MyTypeA;
    propertyB: MyTypeB;
    propertyC: typeof propertyC;
}

function test(foo: IModule) {
  new foo.propertyC.MyClass("me")
}

以供参考:

// propertyC.ts
export class MyClass { constructor(public name: string) {} }

推荐阅读