gpt4 book ai didi

typescript - 从给定类型的一组键中,相应地设置这些键的两个实例会导致错误类型

转载 作者:行者123 更新时间:2023-12-04 01:12:30 25 4
gpt4 key购买 nike

鉴于以下情况:

type Dummy = {
a: string,
b: number
}

const a: Dummy = {
a: "a",
b: 1
}

const b: Dummy = {
a: "b",
b: 2
}

const problem = (keys: (keyof Dummy)[]) => {
keys.forEach(key => {
a[key] = b[key]
})
}

出现TS2322,找不到解决办法。 (或者用文字更好地描述它)。

这是完整的错误:Type 'string | number' 不可分配给类型 'never'。

最佳答案

问题是 keyof dummy'a' | 'b'不区分它们 - TypeScript 不够智能,无法推断如果 a[key] 指的是字符串,b [key] 还将引用可以包含字符串的属性。 (它目前看到 b[key]string | number,它不能分配给只能是字符串或数字但不能同时是两者的值。)

您需要使用泛型来正确键入 key ,以便允许赋值:

const problem = <T extends keyof Dummy>(key: T) => {
a[key] = b[key];
}

如果您有一个键数组,请考虑先使用 Object.fromEntries 创建一个部分对象,然后使用 Object.assign:

const problem = (keys: (keyof Dummy)[]) => {
const partial = Object.fromEntries(
keys.map(key => [key, b[key]])
);
Object.assign(a, partial);
}

关于typescript - 从给定类型的一组键中,相应地设置这些键的两个实例会导致错误类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64393174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com