Skip to content
On this page

ts is

ts
  _isElement(obj: any): obj is Element {
    return !!(obj && obj.nodeType == 1);
  }

今天刚看到这个ts is 不同于as 当 _isElement 返回true时 obj 被定义为Element类型

ts
const foo = (val: unknown) => isString(val) ? val.toUpperCase() : val

const foo = (val: unknown) => isString(val) ? (val as string).toUpperCase() : val

const isString = (val: unknown): val is string => getType(val) === 'string'

如上我们可以通过is关键字告诉编译器该值的类型

ts
const getType = (val: unknown) => Object.prototype.toString.call(val).slice(8, -1).toLowerCase()

const isArray = <T>(val: unknown): val is T[] => getType(val) === 'array'
// 这里我们通过泛型说明如果 isArray 返回了 true ,意味着 val 是由 string 构成的数组
const foo = (val: unknown) => isArray<string>(val) ? val.map(item => item.toLowerCase()) : val