我有一个模块,它定义了几个采用类型参数(<T>
)并实现接口(my_interface
)的类。
// [my_module.ts]
import {my_interface} from ".\typings.d.ts"
export class Class_A <T> implements my_interface {
blah blah blah;
}
export class Class_B <T> implements my_interface {
blah blah blah;
}
我有一个.d.ts
文件,它定义了类实例的接口:
// [typings.d.ts]
export interface my_interface <T> {
blah:blah;
}
我想添加一个描述整个模块的界面,但是下面提到了一个&#34; TS2304:找不到名字&#39; T&#39;。&#34;错误:
// [typings.d.ts]
export interface MY_MODULE {
Class_A: my_interface<T>;
Class_B: my_interface<T>;
}
以下提出了一个&#34; TS2314:Generic type&#39; my_interface&#39;需要1种类型的参数&#34;错误:
// [typings.d.ts]
export interface MY_MODULE {
Class_A: my_interface;
Class_B: my_interface;
}
有没有办法创建一个接口(MY_MODULE
)来描述通过以下方式导入已编译的JS代码时导入的对象:
var my_module:MY_MODULE = require("my_module")
答案 0 :(得分:1)
我不得不怀疑你是否在这里有意义地使用泛型。无论如何,过去最不愿意做你想做的事情就是这样:make MY_MODULE
泛型。
export interface MY_MODULE<T> {
Class_A: my_interface<T>;
Class_B: my_interface<T>;
}
然后参数将正确解析。在导入中,您可以将其键入为
var my_module:MY_MODULE<type-here> = require("my_module")
如果你不关心什么食物,请继续做
var my_module:MY_MODULE<any> = require("my_module")
这有一些含义。这意味着type_A
和type_B
都是相同类型的通用名称。这是有意的吗?如果没有,那么您应该填写您对type_A和type_B感兴趣的类型,而不是在类型注释中使用:my_interface<T>
。如果您不在乎,可以再次使用any
。
您是否要在使用之前禁止提供类型信息?也许类型A和B是某种类型的集合,您希望它们将它们初始化的类型带到以后的函数调用中。您也可以实现此目的,但您需要使用以下函数:
interface ExampleModule {
Class_A: <T> (param: T) => my_interface<T>
}
或构造函数,例如:
interface ExampleModule {
Class_A: { new<T>(): my_interface<T> };
}
然后使用生成的对象。