typeof 类型守卫
typeof 返回字符串
- object
- string
- number
- bigint
- symbol
- undefined
- function
检查 typeof 返回值是一种类型保护
类型缩小
将类型细化为比声明更具体的类型的过程
下面代码中 padding 的类型可以是 number 或者 string,下面代码段中的typeof padding === 'number'这个检查就是类型防护
function padLeft(padding: number | string, input: string): string { if (typeof padding === 'number') { return new Array(padding + 1).join(' ') + input } else { return padding + input }}真值缩小
先了解一下 typerscript 中的 fasly 假值
- 0
- NaN
- "" (空字符串)
- 0n (bigint 的零)
- null
- undefined
下面的例子就是利用条件判断去进行真值缩小
function printAll(strs: string | string[] | null) { if (strs && typeof strs === 'object') { strs.forEach(s => { console.log(s) }) } else if (typeof strs === 'string') { console.log(strs.concat('hello')) } else { // ... }}
function getUserOnlineMessage(numUsersOnline: number) { if (numUsersOnline) { return `现在共有 ${numUsersOnline} 人在线` } return `现在没有人在线`}
function multiplyAll(values: number[] | undefined, factor: number) { if (!values) { return values } else { return values.map(x => { return x * factor }) }}console.log(multiplyAll([2, 3, 4], 3))