- TypeScript 简介与优势
- TypeScript 安装与使用
- TypeScript 变量声明
- TypeScript 基础类型
- TypeScript BigInt
- TypeScript Symbol
- TypeScript 元组(Tuple)
- TypeScript 枚举(Enum)
- TypeScript Never 与 Unknown
- TypeScript 接口(Interface)
- TypeScript 类(Class)
- TypeScript 函数(Function)
- TypeScript 字面量类型
- TypeScript 类型推断
- TypeScript 类型断言
- TypeScript 类型保护
- TypeScript 泛型(Generic)
- TypeScript 类型兼容性
- TypeScript 交叉类型
- TypeScript 联合类型
- TypeScript 类型别名
- TypeScript 索引类型
- TypeScript 映射类型
- TypeScript 条件类型
- TypeScript is 关键字
- TypeScript infer 关键字
- TypeScript Truthy 与 Falsy
- TypeScript 迭代器(Iterator)
- TypeScript 生成器(Generator)
- TypeScript 装饰器(Decorator)
- TypeScript Reflect Metadata
- TypeScript 混入(Mixins)
- TypeScript 模块
- TypeScript 命名空间
- TypeScript 声明合并
- TypeScript 编译选项
- TypeScript tsconfig.json 配置
- TypeScript TSLint 与 ESLint
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
TypeScript is 关键字
本节介绍 TypeScript 中的 is
关键字,它被称为类型谓词,用来判断一个变量属于某个接口或类型。如果需要封装一个类型判断函数,你应该第一时间想到它,本节列出了一些常用的类型判断函数以供参考。
1. 慕课解释
is
关键字一般用于函数返回值类型中,判断参数是否属于某一类型,并根据结果返回对应的布尔类型。
语法:prop is type
2. 举例说明
在一些兑换码场景,经常会需要将兑换码全部转为大写,之后再进行判断:
function isString(s: unknown): boolean {
return typeof s === 'string'
}
function toUpperCase(x: unknown) {
if(isString(x)) {
x.toUpperCase() // Error, Object is of type 'unknown'
}
}
代码解释:
第 7 行,可以看到 TypeScript 抛出了一个错误提示,一个 unknown 类型的对象不能进行 toUpperCase() 操作,可是在上一行明明已经通过 isString()
函数确认参数 x 为 string 类型,但是由于函数嵌套 TypeScript 不能进行正确的类型判断。
这时,就可以使用 is
关键字:
const isString = (s: unknown): s is string => typeof s === 'string'
function toUpperCase(x: unknown) {
if(isString(x)) {
x.toUpperCase()
}
}
解释: 通过 is 关键字将类型范围缩小为 string 类型,这也是一种代码健壮性的约束规范。
3. 一些拓展函数
下面是一些常用的类型判断函数:
const isNumber = (val: unknown): val is number => typeof val === 'number'
const isString = (val: unknown): val is string => typeof val === 'string'
const isSymbol = (val: unknown): val is symbol => typeof val === 'symbol'
const isFunction = (val: unknown): val is Function => typeof val === 'function'
const isObject = (val: unknown): val is Record<any, any> => val !== null && typeof val === 'object'
function isPromise<T = any>(val: unknown): val is Promise<T> {
return isObject(val) && isFunction(val.then) && isFunction(val.catch)
}
const objectToString = Object.prototype.toString
const toTypeString = (value: unknown): string => objectToString.call(value)
const isPlainObject = (val: unknown): val is object => toTypeString(val) === '[object Object]'
4. 小结
is
关键字经常用来封装"类型判断函数",通过和函数返回值的比较,从而缩小参数的类型范围,所以类型谓词 is 也是一种类型保护。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
感谢您的提醒,已修正错误的内容!
这里的val应该为s