成员为类的对象的接口

时间:2016-10-16 17:21:05

标签: typescript

我有一个模块,它定义了几个采用类型参数(<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")

1 个答案:

答案 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_Atype_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> };
}

然后使用生成的对象。