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))