类型收窄
# 类型收窄
像下面这样子typescript会报一个错误
function padLeft(padding: string | number, input: string) {
// 运算符"+"不能应用于类型"string | number"和"number"
return new Array(padding + 1).join(' ') + input
}
在我们的 if 语句中,TypeScript 会认为 typeof padding === number 是一种特殊形式的代码,我们称之为类型保护 (type guard),TypeScript 会沿着执行时可能的路径,分析值在给定的位置上最具体的类型。
TypeScript 的类型检查器会考虑到这些类型保护和赋值语句,而这个将类型推导为更精确类型的过程,我们称之为收窄 (narrowing)
function padLeft(padding: string | number, input: string) {
if (typeof padding === 'number') {
return new Array(padding + 1).join(' ') + input
}
return padding + input
}