TypeScript 学习笔记 — 类型兼容 (十)

科技资讯 投稿 8200 0 评论

TypeScript 学习笔记 — 类型兼容 (十)

目录
    一.基本数据类型的兼容性
  • 二.接口兼容性
  • 三.函数的兼容性
  • 四.类的兼容性
    • 类的私有成员和受保护成员
  • 五.泛型的兼容性
  • 六.枚举的兼容性
  • 标称类型简短介绍

TS 是结构类型系统(structural type system),基于结构/形状检查类型,而非类型的名字。
结构是否兼容。(核心是考虑安全性,结构化的类型系统(又称鸭子类型检查,如两个类型名字不一样但是无法区分
类型兼容性是基于结构子类型的。 结构类型是一种只使用其成员来描述类型的方式。

x要兼容y,那么y至少具有与x相同的属性。
这里要检查y是否能赋值给x,编译器检查x中的每个属性,看是否能在y中也找到对应属性。
X 兼容 Y:X(目标类型= Y(源类型
简单一句话概括兼容性: 重新赋值不报错(类型自动转化)

一.基本数据类型的兼容性

let temp: string | number;
let num!: number;
temp = num;
let obj: {
  toString(: string;
};
let str: string = "yya";
obj = str; // 字符串中具备toString(方法,所以可以进行兼容
obj.toString(; // 安全,保证使用的时候不会发生异常

二.接口兼容性

接口的兼容性,只要满足接口中所需要的类型即可!(保证你要的,我都有,就行,多了也没关系

interface IAnimal {
  name: string;
  age: number;
}
interface IPerson {
  name: string;
  age: number;
  address: string;
}
let animal: IAnimal;
let person: IPerson = {
  name: "yya",
  age: 18,
  address: "beijing",
};

type T2 = IPerson extends IAnimal ? true : false; // true
animal = person; // 子类赋予给父类 兼容

三.函数的兼容性

函数的兼容性主要是比较参数和返回值

参数:赋值函数的参数要少于等于被赋值的函数:也就是说,对应函数的参数来讲,少的参数可以赋予给多的,因为内部实现传了多个可以少用或不用(忽略额外的参数在 JavaScript 里是很常见的

sum2的每个参数必须能在sum1里找到对应类型的参数。 注意的是参数的名字相同与否无所谓,只看它们的类型sum2的每个参数在sum1中都能找到对应的参数,所以允许赋值。

let sum1 = (a: string, b: string => a + b;
let sum2 = (a: string => a;
sum1 = sum2;

举例:Array#forEach给回调函数传 3 个参数:item,index 和 array。 尽管如此,传入一个只使用第一个参数的回调函数也是可以的

type Func<T> = (item: T, index: number, array: any[] => void;
function forEach<T>(arr: T[], cb: Func<T> {
  for (let i = 0; i < arr.length; i++ {
    cb(arr[i], i, arr;
  }
}
forEach([1, 2, 3], (item => {
  console.log(item;
};

返回值:

type sum1 = ( => string | number;
type sum2 = ( => string;

let fn1: sum1;
let fn2!: sum2;
fn1 = fn2;

四.类的兼容性

类与对象字面量和接口差不多,但有一点不同:类有静态部分和实例部分的类型。 比较两个类类型的对象时,只有实例的成员会被比较。 静态成员和构造函数不在

编程笔记 » TypeScript 学习笔记 — 类型兼容 (十)

赞同 (54) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽