编译器无法识别类型保护

时间:2021-03-04 12:31:33

标签: typescript

在这个例子中,Typescript 编译器仍然抱怨,尽管在我看来它不应该

type Car = {
  isOn: boolean
  name: string
}


function doSomething(key: keyof Car, value: string | boolean) {
  const car: Car = {
    isOn: false,
    name: "myCar",
  }
  if (typeof car[key] === typeof value) {
    car[key] = value
  }
}

错误信息:

“TS2322:类型 'string | boolean' 不能分配给类型'never'。类型'string' 不能分配给类型'never'。”

我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

无法正确推断结果的类型。为此,您需要对其进行模板化:

function doSomething<K extends keyof Car>(key: K, value: Car[K]) {
   // ...
}