子类型值可以分配给父类型变量吗?

时间:2019-04-22 02:36:58

标签: typescript

子类型值可以分配给父类型变量,相反,不是吗?我很困惑,如果这是真的,并且文档中说TypeScript中的所有类型都是称为Any类型的单个顶级类型的子类型,那么为什么任何类型值都可以分配给所有其他类型变量?

interface A {
    name: string,
}

interface B extends A {
    name: string,
    age: number,
}

let a: A = {
    name: 'pony',
};

let b: B = {
    name: 'jack',
    age: 10,
};

// a = b; // OK
// b = a; // fail

1 个答案:

答案 0 :(得分:0)

您可以将any类型分配给任何类型,这仅仅是因为使用此类型是TypeScript类型检查机制的退出。这并不意味着它将是正确的代码。只是TS不会抱怨打破多态性规则。

TypeScript's docs中使用any有一个很好的解释。