一、概述
TypeScript里的类型兼容性是基于结构子类型的。 结构类型是一种只使用其成员来描述类型的方式。 它正好与名义(nominal
)类型形成对比
二、规则
\1. TypeScript结构化类型系统的基本规则是:如果y
赋值给x
,那么y
必须包含x
所有key
let x = { name: "木子李" };
let y = { name: "张三丰", tel: "152288885771" }
x = y; // ok
y = x; // error
\2. 目标函数的参数必须在原函数中找到对应类型的参数
let x = (a: number) => 0;
let y = (a: number, b: string) => 0;
x = y; // error
y = x; // ok
\3. 原函数的返回值类型必须是目标函数返回值类型的子类型。
let x = () => ({name: "木子李"});
let y = () => ({name: "张三丰", tel: "17398888669"});
x = y; // ok
y = x; // error