Mic*_*per 3 interface typescript
这显然可以在C#中正常工作,但不能在Typescript中工作,是否有解决方法,还是我只需要使用其他名称?
export interface IThing<T> extends IThing {
Value: T;
}
export interface IThing {
Name?: string;
ValueStr?: string;
Type?: string;
}
Run Code Online (Sandbox Code Playgroud)
我得到“所有IThing声明必须具有相同的类型参数”
抱歉,如果我很稠密!
您需要使用不同的名称,识别接口时仅名称才有意义,而泛型类型参数的数量则无关紧要。
在Typescript中,泛型在编译时被擦除,因此无法区分泛型类的不同实例。尽管接口只是一个编译时结构,并且可能通过名称以及通用参数的数量来区分,但我的猜测是,由于类以这种方式工作,因此决定使接口以相同方式工作。
一种解决方法是对接口使用默认的类型参数:
export interface IThing<T = any> {
Name?: string;
ValueStr?: string;
Type?: string;
Value: T;
}
var d: IThing;
var foo: IThing<number>
Run Code Online (Sandbox Code Playgroud)
编辑2
我误解了这个问题,所以这不是正确的答案。我将把它留在这里来展示如何使用声明合并。
第一个声明有类型参数T,而第二个声明没有。只需确保它们都有类型参数即可。
export interface IThing<T> {
Name?: string;
ValueStr?: string;
Type?: string;
}
Run Code Online (Sandbox Code Playgroud)
编辑
interface IThing<T> extends IThing
Run Code Online (Sandbox Code Playgroud)
这是行不通的,正如我上面所说,只需确保两个接口声明具有相同的名称和相同的类型参数
interface IThing<T>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1028 次 |
| 最近记录: |