美文网首页
typescript 中的 "is"

typescript 中的 "is"

作者: 如果俞天阳会飞 | 来源:发表于2023-01-08 15:59 被阅读0次

概念

是一种类型推断表达式的关键字,通过函数返回值的比较,从而"缩小"参数的类型范围

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

参考:https://zhuanlan.zhihu.com/p/87314737

相关文章

网友评论

      本文标题:typescript 中的 "is"

      本文链接:https://www.haomeiwen.com/subject/atpucdtx.html