TypeScript与JavaScript不同之处系列(七) ===>类型推论, 类型兼容性
2020-04-05 07:15
561 查看
本系列目的: 列出TypeScript与JavaScript的不同点, 缩小文档内容, 提高学习速度. 原文档地址: https://www.tslang.cn/index.html
全系列目录
- 1.基础类型 https://blog.csdn.net/c_kite/article/details/85232021
- 2.接口 https://blog.csdn.net/c_kite/article/details/85262016
- 3.类 https://blog.csdn.net/c_kite/article/details/85274189
- 4.函数 https://blog.csdn.net/c_kite/article/details/85283691
- 5.泛型 https://blog.csdn.net/c_kite/article/details/85335913
- 6.枚举 https://blog.csdn.net/c_kite/article/details/85337336
- 7.类型推论, 类型兼容性 https://blog.csdn.net/c_kite/article/details/85380924
- 8.高级类型 https://www.geek-share.com/detail/2797042153.html
- 9.命名空间, 三斜线指令 https://www.geek-share.com/detail/2797042143.html
文章目录
1. 类型推论
1.1. 基本
let x = 3; // 推断x为数字 let zoo = [new Rhino(), new Elephant(), new Snake()]; // 推断为联合数组类型 (Rhino | Elephant | Snake)[]
2. 类型兼容性
一. typeScript里的类型兼容性是基于结构子类型的。 结构类型是一种只使用其成员来描述类型的方式. typeScript里的类型兼容性是基于结构子类型的。 结构类型是一种只使用其成员来描述类型的方式.
// 例1: interface Named { name: string; } let x: Named; let y = { name: 'Alice', location: 'Seattle' }; x = y;
这里要检查y是否能赋值给x,编译器检查x中的每个属性,看是否能在y中也找到对应属性。 在这个例子中,y必须包含名字是name的string类型成员。y满足条件,因此赋值正确。
二.
// 例2 let x = (a: number) => 0; let y = (b: number, s: string) => 0; y = x; // OK x = y; // Error
要查看x是否能赋值给y,首先看它们的参数列表。 x的每个参数必须能在y里找到对应类型的参数。 注意的是参数的名字相同与否无所谓,只看它们的类型。 这里,x的每个参数在y中都能找到对应的参数,所以允许赋值。
第二个赋值错误,因为y有个必需的第二个参数,但是x并没有,所以不允许赋值。
三.
枚举类型与数字类型兼容,并且数字类型与枚举类型兼容。不同枚举类型之间是不兼容的。比如,
// 例3 enum Status { Ready, Waiting }; enum Color { Red, Blue, Green }; let status = Status.Ready; status = Color.Green; // Error
四.
类与对象字面量和接口差不多,但有一点不同:类有静态部分和实例部分的类型。 比较两个类类型的对象时,只有实例的成员会被比较。 静态成员和构造函数不在比较的范围内。
class Animal { feet: number; constructor(name: string, numFeet: number) { } } class Size { feet: number; constructor(numFeet: number) { } } let a: Animal; let s: Size; a = s; // OK s = a; // OK
这两节感觉挺无聊的就放在一起写了, 详情请见https://www.tslang.cn/docs/handbook/type-compatibility.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- TypeScript与JavaScript不同之处系列(八) ===> 高级类型
- 利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
- TypeScript与JavaScript不同之处系列(九) ===> 命名空间, 三斜线指令
- 利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
- 利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
- Javascript基础系列之(四)数据类型 (数组 array)
- javascript 简单高效判断数据类型 系列函数 By shawl.qiu
- JavaScript专精系列(1)——值类型和引用类型
- JavaScript系列:ECMAScript原始类型
- TypeScript基础入门 - 类型兼容性 - 泛型
- JavaScript系列:ECMAScript类型转换
- JavaScript不同数据类型的转换
- 不同浏览器之间的javascript和css兼容性问题
- TypeScript 类型推论整理
- javascript系列:NaN类型
- 走进官方手册系列 --- 详解InnoDB针对不同类型的SQL所采取的锁策略
- 从 JavaScript 到 TypeScript 系列
- JavaScript系列----数据类型以及传值和传引用
- 前端面试系列之---javascript基础和数据类型
- javascript在不同浏览器中可能出现的兼容性问题