Skip to content

型变

“型变”分为两种,一种是子类型可以赋值给父类型,叫做协变(covariant),

一种是父类型可以赋值给子类型,叫做逆变(contravariant)。

协变

子类型可以赋值给父类型

js
interface Person {
    name: string;
    age: number;
} 

interface MinGe {
    name: string;
    age: number;
    hobbies: string[]
}

这里 MinGe 是 Person 的子类型,更具体,那么 MinGe 类型的变量就可以赋值给 Person 类型:

逆变

父类型可以赋值给子类型

js
let printHobbies: (minge: MinGe) => void;

printHobbies = (minge) => {
    console.log(minge.hobbies);
}

let printName: (person: Person) => void;

printName = (person) => {
    console.log(person.name);
}

printHobbies 的参数 MinGe 是 printName 参数 Person 的子类型