类型收窄

# 类型收窄

像下面这样子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
}