这显然适用于C#,但不适用于typescript,有没有办法绕过它,或者我只需要使用不同的名称?
export interface IThing<T> extends IThing {
Value: T;
}
export interface IThing {
Name?: string;
ValueStr?: string;
Type?: string;
}
我得到‘IThing的所有声明都必须有相同的类型参数’
如果我太愚蠢了,很抱歉!
发布于 2018-02-15 15:28:25
您需要使用不同的名称,只有名称在标识接口时才重要,而不是泛型类型参数的数量。
泛型在编译时在Typescript中被擦除,因此无法区分泛型类的不同实例化。尽管接口只是一个编译时构造,可能已经通过名称和泛型参数的数量进行了区分,但我的猜测是,由于类是以这种方式工作的,所以决定让接口以同样的方式工作。
一种解决方法是对接口使用默认类型参数:
export interface IThing<T = any> {
Name?: string;
ValueStr?: string;
Type?: string;
Value: T;
}
var d: IThing;
var foo: IThing<number>
发布于 2018-02-15 15:27:07
编辑2
我误解了问题,所以这不是一个正确的答案。我将在这里说明如何使用声明合并。
第一个声明有一个类型参数T
,而第二个没有,只要确保它们都有类型参数。
export interface IThing<T> {
Name?: string;
ValueStr?: string;
Type?: string;
}
编辑
interface IThing<T> extends IThing
这是行不通的,正如我在上面所说的,只需确保两个接口声明具有相同的名称和相同的类型参数
interface IThing<T>
https://stackoverflow.com/questions/48810670
复制