You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
letobj={a: 1};// A. 编译器推断出 obj 的类型: let obj: { a: number; }// B. 编译器检查数据的使用是否合理,不合理时会抛出 Errorobj.b;// Error: 属性 b 不存在obj.a='2';// Error:'2' 不能赋值给 number 类型
欢迎来到 《探索 TypeScript 类型注解》 系列教程。
上一篇介绍了如何创建自定义类型,
本篇深入探索 TypeScript 编译器的静态类型检查机制。
目录
正文
当数据类型操作不合理时,编译器静态编译时会提示错误。
通过上面编译器对类型注解的静态检查,可以初步了解到类型检查的机制:编译器会适当的推断数据的类型,以及检查类型的使用是否合理,下面我们对类型检查机制进一步探索。
类型推断
Type Inference 类型推断:当没有显式指定类型注解时,编译器会推断出一个类型。
基本类型推断
在定义变量、设置函数参数默认值、函数返回值时,编译器都会自动进行类型推断:
类型推断在一定程度上可以保持代码简洁易读,但有时并不总是如此
最佳通用类型
从多个表达式的类型推断出最佳通用类型
上下文类型
由上下文推断出表达式的类型
类型断言
Type Assertion 类型断言可以让你告诉编译器当前数据的类型,有两种语法:
<T>value
value as T
(jsx 中只能用 as 语法)类型兼容
如果类型 Y 可以赋值给类型 X,即 X = Y,那么我们说,目标类型 X 兼容源类型 Y。
基本类型兼容
之前“数据类型”篇幅中已有介绍,详情请点击此处 。
成员结构兼容
必选成员少的兼容成员多的,即源类型至少具有与目标类型相同的成员
基本结构兼容
类兼容
类的实例成员少的兼容成员多的 (比较两个类的对象时,静态成员不比较)
枚举兼容
枚举类型与数值类型相互兼容,枚举之间不兼容
泛型兼容
函数参数个数兼容
多兼容少
必选参数
必选参数、可选参数、剩余参数
命名参数
类型保护
许多表达式可以确保在某个作用域中运行时,数据有着更精确的类型,称为类型保护。
常识别为类型保护的操作符
===
!==
||
!
去除 null 和 undefined类型谓词
函数的返回值类型为类型谓词
parameterName is Type
, 其中parameterName
为函数参数。可识别为类型保护的关键字
如下三个 JS 关键字可以帮助 TS 进一步识别类型
type v === typename
其中 typename 为 boolean, number, string, symbol 时,TS 才会识别为类型保护。结语
本篇通过类型检查机制探索了类型检查的规则,下篇通过将探索 TypeScript 的高级类型。
协议
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。
《探索 TypeScript 类型注解》
参考链接
Handbook: https://github.com/microsoft/TypeScript-Handbook
The text was updated successfully, but these errors were encountered: