首页 > 解决方案 > 编译器无法识别类型保护

问题描述

在这个例子中,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'。”

我错过了什么吗?

标签: typescript

解决方案


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

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

推荐阅读