主题
型变
“型变”分为两种,一种是子类型可以赋值给父类型,叫做协变(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 的子类型