Typescript 编译器无法识别类型保护
在本例中,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
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不能正确推断类型吗?在你的代码中,键
和值
类型没有链接,编译器也不关心手动检查类型
(这很有意义,因为例如类型【】
是对象
),因此编译器只信任您给它的类型。顺便说一句,您也可以放弃手动类型检查