typescript - 类引用的打字稿导出类型
问题描述
我正在尝试定义一个其他团队成员在定义代码模块时可以遵守的接口,这样一些消耗的代码可以对模块做出假设,并且任何新模块只需要遵守(或多或少)中的接口订单添加到系统中。
例如,假设我有一个目录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
包含依赖于模块导出的不同类(但它始终是类构造函数)。
有可能实现我所追求的吗?
解决方案
如果我理解正确,您可以通过使用导入来完成这项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) {} }
推荐阅读
- ruby-on-rails - Rails 系统测试:如何设置 default_host_url
- api - 获取 Instagram 访问令牌错误
- node.js - 在 Mongoose 上存储模式的正确方法?
- go - 为什么安装dlv失败
- c# - 具有类型参数 WF 4 的自定义活动(C# 工作流基础)
- swift - UIDocumentPickerViewController 允许在应用程序第一次运行时选择文件,但随后不能
- metrics - 高基数维度的 Prometheus 度量和标签命名
- javascript - Angular 响应式表单中具有所需重叠的电子邮件验证
- python - 在 Windows 10 上安装 jupyter notebook 时出错
- c++ - C++ Functor 作为函数的输出参数