TypeScript 类型兼容性整理
来源:互联网 发布:淘宝恶意刷流量软件 编辑:程序博客网 时间:2024/05/16 09:38
一、介绍
TypeScript里的类型兼容性是基于结构子类型的。结构类型是一种只使用其成员来描述类型的方式。
它正好与名义(nominal)类型形成对比。
TypeScript的结构性子类型是根据JavaScript代码的典型写法来设计的。因为JavaScript里广泛的使用匿名对象,例如函数表达式和对象字面量,所以使用结构类型系统来描述类型比名义类型系统更好。
1.基本规则,具有相同的属性
//基本规则是具有相同的属性//类似继承,子类型中的属性在父类中都存在,反之则编译失败//特别说明,TypeScript中类的属性默认值都为undefined//属性为undefined的不会编译到js文件中去interface Named { name: string;}class Person { name: string; age:number;}let p: Named;//Person没有继承Named//同样编译通过,运行通过p = new Person();p.name='张三丰';console.info(p);二、函数兼容性
1.形参
//函数兼容性比较//形参需要包含关系//形参1是形参2的子类型,参数名字可以不相同let x=(a:number)=>0;let y=(b:number,s:string)=>0;x=y; //编译报错,x参数中没有s参数y=x;2.返回类型
//返回类型,需要被包含关系//返回类型1,是返回类型2的子类型let x=()=>({name:'Alice'});let y=()=>({name:'Alice',location:'Seattle'});y=x; //编译报错,x中没有返回参数locationx=y;3.可选参数及剩余参数
比较函数兼容性的时候,可选参数与必须参数是可互换的。 源类型上有额外的可选参数不是错误,目标类型的可选参数在源类型里没有对应的参数也不是错误。
当一个函数有剩余参数时,它被当做无限个可选参数。
这对于类型系统来说是不稳定的,但从运行时的角度来看,可选参数一般来说是不强制的,因为对于大多数函数来说相当于传递了一些undefinded。
三、枚举
枚举类型与数字类型兼容,并且数字类型与枚举类型兼容。不同枚举类型之间是不兼容的。
//枚举//枚举类型与数字类型兼容,并且数字黑星与枚举类型兼容。不同枚举类型之间是不兼容的.enum Status{ Ready, Warting}enum Color{ Red, Blue, Green}console.log(Status.Ready==0); //输出truelet status=Status.Ready; //输出0console.log(status);status=2;console.log(status); //输出2//status=Color.Blue;//编译报错,不同枚举类型之间不兼容
四、类
类与对象字面量和接口差不多,但有一点不同:类有静态部分和实例部分的类型。 比较两个类类型的对象时,只有实例的成员会被比较。 静态成员和构造函数不在比较的范围内。
class Animal { feet: number; constructor(name: string, numFeet: number) { }}class Size { feet: number; constructor(numFeet: number) { }}let a: Animal;let s: Size;a = s; //OKs = a; //OK私有成员会影响兼容性判断。 当类的实例用来检查兼容时,如果目标类型包含一个私有成员,那么源类型必须包含来自同一个类的这个私有成员。 这允许子类赋值给父类,但是不能赋值给其它有同样类型的类。
五、泛型
因为TypeScript是结构性的类型系统,类型参数只影响使用其做为类型一部分的结果类型。
interface Empty<T> {}let x: Empty<number>;let y: Empty<string>;x = y; // okay, y matches structure of x
六、高级注册
子类型与赋值
目前为止,我们使用了兼容性,它在语言规范里没有定义。 在TypeScript里,有两种类型的兼容性:子类型与赋值。 它们的不同点在于,赋值扩展了子类型兼容,允许给 any赋值或从any取值和允许数字赋值给枚举类型或枚举类型赋值给数字。
语言里的不同地方分别使用了它们之中的机制。 实际上,类型兼容性是由赋值兼容性来控制的甚至在 implements和extends语句里。 更多信息,请参阅 TypeScript语言规范.
更多:
TypeScript 类型推论整理
TypeScript 枚举使用整理
TypeScript 泛型<T>使用整理
- TypeScript 类型兼容性整理
- TypeScript 类型推论整理
- TypeScript 高级类型整理
- TypeScript 简介整理
- TypeScript 类使用整理
- TypeScript 函数使用整理
- TypeScript 枚举使用整理
- TypeScript 命名空间整理
- typescript[1] 基本类型
- TypeScript-基础类型学习
- typescript基础类型
- TypeScript函数类型
- typescript 之 基础类型
- TypeScript-基础类型
- TypeScript的映射类型
- Typescript(基础类型)
- typeScript中的类型
- TypeScript 泛型<T>使用整理
- 简单的求导的符号运算算法
- NSString 和 NSURL的互相转换
- 如何写出你的第一个c语言程序
- Spring的depends-on属性Bean依赖
- MATLAB矩阵分析
- TypeScript 类型兼容性整理
- 多年iOS开发经验总结(一) 其实就是一些常用的代码块
- 4.利用Model Builder迭代器对数据批处理
- Spark计算平台算子介绍与学习
- 解决mysql安装后Can't connect to local MySQL server through socket '/tmp/mysql.sock' 问题
- ssm框架之导出
- 每天更新bing首页图片为桌面壁纸
- java char 和string
- Linux-在linux修改文件夹及其子文件夹的权限