概念
是一种类型推断表达式的关键字,通过函数返回值的比较,从而"缩小"参数的类型范围
vueuse中的例子
export const isBoolean = (val: any): val is boolean => typeof val === 'boolean'
export const isFunction = <T extends Function> (val: any): val is T => typeof val === 'function'
export const isNumber = (val: any): val is number => typeof val === 'number'
export const isString = (val: unknown): val is string => typeof val === 'string'
export const isObject = (val: any): val is object =>
toString.call(val) === '[object Object]'
解释
从搜索到的代码中, 我们拿出最有代表性的一个函数说明.
export const isString = (val: unknown): val is string => typeof val === 'string'
可以看见在返回值的不是类型而是一个表达式"val is string", 这段代码的意思是当isString返回值为true的时候, 参数val就是string类型
直接返回boolean不行吗?
不行! 看下面的代码, 我们虽然知道在if判断后aa一定是string,但是ts不知道, ts会提示aa可能是null类型, 不能执行substring方法.
image.png
所以需要使用is特性. ts可以根据 if 判断推断出当前的aa为string类型:
image.png






网友评论