Typescript 编译器无法识别类型保护

Typescript 编译器无法识别类型保护,typescript,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] === typeo

在本例中,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”。”


我遗漏了什么吗?

无法正确推断结果的类型。要执行此操作,您需要为其设置模板:

function doSomething<K extends keyof Car>(key: K, value: Car[K]) {
   // ...
}
功能剂量仪(键:K,值:车[K]){
// ...
}

请编辑以将错误包含为文本而不是屏幕截图,好吗?谢谢您的提示!完成!你能分享你剩下的代码吗?是的!这就解决了!非常感谢。你知道为什么keyof Car不能正确推断类型吗?在你的代码中,
类型没有链接,编译器也不关心手动检查
类型
(这很有意义,因为例如
类型【】
对象
),因此编译器只信任您给它的类型。顺便说一句,您也可以放弃手动类型检查