一、概述

TypeScript里的类型兼容性是基于结构子类型的。 结构类型是一种只使用其成员来描述类型的方式。 它正好与名义(nominal)类型形成对比

二、规则

\1. TypeScript结构化类型系统的基本规则是:如果y赋值给x,那么y必须包含x所有key

  1. let x = { name: "木子李" };
  2. let y = { name: "张三丰", tel: "152288885771" }
  3. x = y; // ok
  4. y = x; // error

\2. 目标函数的参数必须在原函数中找到对应类型的参数

  1. let x = (a: number) => 0;
  2. let y = (a: number, b: string) => 0;
  3. x = y; // error
  4. y = x; // ok

\3. 原函数的返回值类型必须是目标函数返回值类型的子类型。

  1. let x = () => ({name: "木子李"});
  2. let y = () => ({name: "张三丰", tel: "17398888669"});
  3. x = y; // ok
  4. y = x; // error