您在这里遇到的问题是因为 TypeScript 无法推断您试图更新的值是 Type1
对象的一个属性。在 TypeScript 中,keyof Type1
类型实际上是一个字符串字面量类型,它表示 Type1
对象的属性名称。所以 Type1[keyof Type1]
类型会被推断为 string | null | number
,这是因为它取自 Type1
对象的属性。
为了解决这个问题,您需要在函数 updateObj1
中明确指定要更新的属性的类型。这是您需要做的更改:
interface Type1 {
src: string | null;
blur: number;
mask: number;
}
const obj1: Type1 = {
src: null,
blur: 0,
mask: 0,
};
function updateObj1(key: keyof Type1, value: Type1[keyof Type1][keyof Type1]) { // 注意这里的 [keyof Type1] 两次
obj1[key] = value;
}
在这里,Type1[keyof Type1][keyof Type1]
是一个更精确的类型,它明确表示我们想要更新的值是 Type1
对象的一个属性值,而不是 Type1
对象本身。所以,当您将值赋给 obj1[key]
时,TypeScript 将能够正确地推断类型。
希望这能帮到您!如果您还有其他关于 TypeScript 的问题,欢迎继续提问。
需要类型推导(infer)