web:ts的类型兼容性
简介
TypeScript里的类型兼容性是基于结构子类型的。 结构类型是一种只使用其成员来描述类型的方式。不同于名义类型系统(如 Java/C++ 等语言),在基于名义类型的类型系统中,数据类型的兼容性或等价性是通过明确的声明和/或类型的名称来决定的。
兼容方式
属性兼容
如果类型Person至少包含类型Named的所有必需属性,则Named兼容Person(Person可赋值给Named)。
interface Named {name: string;
}class Person {name: string;age: number;
}let p: Named;
// OK, because of structural typing
p = new Person();
函数参数兼容性
双向协变(默认)
函数参数默认支持双向协变(可通过 strictFunctionTypes
禁用):
type Handler = (input: string) => void;
const handler: Handler = (i