我有这个辅助函数:
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;
}
Run Code Online (Sandbox Code Playgroud)
并以这种方式使用:
Helpers.getAndAssignToObject<BlockingConfig>(Components.BlockingRules, blockingData);
Run Code Online (Sandbox Code Playgroud)
它按预期工作,但正如你所看到的,我有一个@ts-ignore我真的很想删除的。
删除它时出现的错误是:
元素隐式具有“any”类型,因为“string”类型的表达式不能用于索引类型“unknown”。在类型“未知”.ts(7053) 上找不到带有“字符串”类型参数的索引签名
我不知道如何解决它。我尝试给出dataKey类型keyof T,但没有成功。
您需要断言Object.keys返回Array<keyof T>not 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;
}
Run Code Online (Sandbox Code Playgroud)
这里解释了这不是默认值的原因。基本上,这个想法是,例如,objectToAssign可以具有比keyof T建议更多的属性,这可能会导致运行时错误。在这种情况下,您将复制这些额外的键,data这在此功能中不是问题,但可能会在其他地方引起问题。
| 归档时间: |
|
| 查看次数: |
2699 次 |
| 最近记录: |