- 介绍
- TypeScript 简介
- TypeScript 入门
- 探索类型系统
- 原始类型
- 类型注释
- 可选属性
- 只读属性
- 索引签名
- 扩展类型
- 字面量类型
- 字面量推断
- 严格空检查
- 枚举
- 缩小范围
- 赋值
- 控制流分析
- 类型谓词
- 可区分联合
- never 类型
- 详尽性检查
- 对象类型
- 元组类型(匿名)
- 命名元组类型(已标记)
- 固定长度元组
- 联合类型
- 交集类型
- 类型索引
- 值的类型
- Func 返回值的类型
- 模块的类型
- 映射类型
- 映射类型修饰符
- 条件类型
- 分配条件类型
- infer 条件类型中的类型推断
- 预定义条件类型
- 模板联合类型
- 任意类型
- 未知类型
- 空类型
- Never 类型
- 接口及类型
- 内置原始数据类型
- 常见的内置 JS 对象
- 重载
- 合并与扩展
- 类型和接口之间的差异
- Class
- 泛型
- 擦除的结构类型
- 命名空间
- Symbols
- 三斜杠指令
- 类型操作
- 其他
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
缩小范围
TypeScript 缩小范围是细化条件块内变量类型的过程。这在使用联合类型时很有用,其中一个变量可以有多个类型。
TypeScript 可识别多种缩小类型范围的方法:
typeof 类型保护
typeof 类型保护是 TypeScript 中的一种特定类型保护,它根据变量的内置 JavaScript 类型检查变量的类型。
const fn = (x: number | string) => { if (typeof x === 'number') { return x + 1; // x 是数字 } return -1; };
真实性缩小
TypeScript 中的真实性缩小是通过检查变量是真还是假来相应地缩小其类型来实现的。
const toUpperCase = (name: string | null) => { if (name) { return name.toUpperCase(); } else { return null; } };
相等缩小
TypeScript 中的相等缩小通过检查变量是否等于特定值来相应缩小其类型。
它与 switch
语句和等号运算符(例如 ===
、 !==
、 ==
和 !=
)结合使用来缩小类型范围。
const checkStatus = (status: 'success' | 'error') => { switch (status) { case 'success': return true case 'error': return null } };
In 运算符缩小
TypeScript 中的 in
运算符缩小范围是一种根据变量类型中是否存在属性来缩小变量类型的方法。
type Dog = { name: string; breed: string; }; type Cat = { name: string; likesCream: boolean; }; const getAnimalType = (pet: Dog | Cat) => { if ('breed' in pet) { return 'dog'; } else { return 'cat'; } };
instanceof 缩小
TypeScript 中的 instanceof
运算符缩小是一种根据变量的构造函数缩小变量类型的方法,方法是检查对象是否是某个类或接口的实例。
class Square { constructor(public width: number) {} } class Rectangle { constructor( public width: number, public height: number ) {} } function area(shape: Square | Rectangle) { if (shape instanceof Square) { return shape.width * shape.width; } else { return shape.width * shape.height; } } const square = new Square(5); const rectangle = new Rectangle(5, 10); console.log(area(square)); // 25 console.log(area(rectangle)); // 50
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论