gpt4 book ai didi

typescript - 类型 'string' 不能用于索引类型 'unknown ||或者如何让 typescript 分配 Type[key] = SameType[key]

转载 作者:行者123 更新时间:2023-12-05 03:00:03 24 4
gpt4 key购买 nike

我有这个辅助函数:

getAndAssignToObject<T>(key: string, objectToAssign: T): Promise<T> {
const data = await AppStorage.get<T>(key);
Object.keys(data).forEach( dataKey => {
// @ts-ignore
objectToAssign[dataKey] = data[dataKey];
});

return data;
}

并以这种方式使用:

Helpers.getAndAssignToObject<BlockingConfig>(Components.BlockingRules, blockingData);

它按预期工作,但如您所见,我有一个我非常想删除的 @ts-ignore

删除它时出现的错误是:

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'unknown'. No index signature with a parameter of type 'string' was found on type 'unknown' .ts(7053)

我不知道怎么解决。我尝试为 dataKey 提供 keyof T 类型,但没有成功。

最佳答案

你需要断言 Object.keys返回 Array<keyof T>不是Array<string> .

async function getAndAssignToObject<T>(key: string, objectToAssign: T): Promise<T> {
const data = await AppStorage.get<T>(key);
(Object.keys(data) as Array<keyof T>).forEach(dataKey => {
objectToAssign[dataKey] = data[dataKey];
});

return data;
}

Playground

解释这不是默认值的原因 here .基本上这个想法是,例如 objectToAssign可能拥有比 keyof T 更多的属性会建议,这可能会导致运行时错误。在这种情况下,您会将这些额外的 key 复制到 data这在这个函数中不是问题,但可能会在其他地方引起问题。

关于typescript - 类型 'string' 不能用于索引类型 'unknown ||或者如何让 typescript 分配 Type[key] = SameType[key],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57285080/

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