通常,TypeScript
中的类型为structural
。但是,根据The TypeScript
manual,在测试两个类的兼容性时,私有属性需要来自同一层次结构。这种限制的原因是什么?
答案 0 :(得分:1)
此限制是create unmatchable types in TypeScript的唯一途径。
如果需要,您可以创建一个表示共享类型的界面(从链接的文章中获取代码)......
interface GeneralId {
getId() : number;
}
class CustomerId {
constructor(private id: number) {}
getId() { return this.id; }
}
class ProductId {
constructor(private id: number) {}
getId() { return this.id; }
}
function nonSpecificMethod(id: GeneralId) {
//...
}
var id1 = new CustomerId(1);
var id2 = new ProductId(2);
// Type passes
nonSpecificMethod(id1);
// Type passes
nonSpecificMethod(id2);
在此示例中,CustomerId
不能用来代替ProductId
(这是创建这种包装类的重点)。如果希望允许它们互换,则可以使用GeneralId
类型。