我有一个像这个例子一样的通用接口,它有一个类型约束:
export interface IExample<T extends MyClass> {
getById(id: number): T;
}
是否可以指定多个类型约束而不仅仅是一个?
我有一个像这个例子一样的通用接口,它有一个类型约束:
export interface IExample<T extends MyClass> {
getById(id: number): T;
}
是否可以指定多个类型约束而不仅仅是一个?
Typescript 不提供为泛型类型获取多重继承的语法。但是,您可以通过使用 Union 类型和 Intersection 类型来实现类似的语义。在您的情况下,您需要一个交集:
interface Example<T extends MyClass & OtherClass> {}
对于两种类型的联合:
interface Example<T extends MyClass | OtherClass> {}
解决此问题的方法是使用超级接口(这也回答了“为什么允许接口从类继承”的问题)。
interface ISuperInterface extends MyClass, OtherClass {
}
export interface IExample<T extends ISuperInterface> {
getById(id: number): T;
}
参考关于从类派生的接口的评论......名字是什么?
我在 0.9.0 规范的第 3.5 节中发现了这一点:
接口声明只引入命名类型,而类声明引入命名类型和构造函数,这些函数创建这些命名类型的实现实例。类和接口声明引入的命名类型只有很小的区别(类不能声明可选成员,接口不能声明私有成员)并且在大多数情况下是可互换的。特别是,只有公共成员的类声明引入了命名类型,其功能与接口声明所创建的类型完全相同。