第08章 类型兼容性

99 阅读1分钟

一、概述

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