类型比较中的私有类属性

时间:2015-08-22 03:37:01

标签: typescript

通常,TypeScript中的类型为structural。但是,根据The TypeScript manual,在测试两个类的兼容性时,私有属性需要来自同一层次结构。这种限制的原因是什么?

1 个答案:

答案 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类型。