我有这个辅助函数:
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
我真的很想删除。
删除它时出现的错误是:
元素隐式具有“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;
}
操场 https://www.typescriptlang.org/play/#code/CYUwxgNghgTiAEYD2A7AzgF3gQQA64GUMkYoBzEALngG8AoeeCjAHgBUA+ACgGtqoUATwCU1AAowkAWwCWaEOw4BuOgF86UNIJRh4AMwCuOjDNRMQGbCmDY0aGWRRskAeQBGAK3CtOvEIOpMGBkUMgAaeCRPb2dbe0dqNlF4CWk5BU5aBkRUTHhgKAwoeABeeCgAdygZLDxCYlIKADpmRT8RFUYudy8wDCaefzQuAqLhcrQcGFJBFkHBJD14TmEmvRIAUSgwAAsRwqgAaX9SjizGRijejFi7BxQAbVGj-wBdUvyDp4PjwVfO+CqYQqbJwDAGGAoT5FFTqOjMKw2O6OZw9bxcABEGIi9EYUGoAEY1MIgA
解释了这不是默认值的原因here https://stackoverflow.com/questions/55012174/why-doesnt-object-keys-return-a-keyof-type-in-typescript/55012175#55012175。基本上的想法是,例如objectToAssign
可以有更多的属性keyof T
会建议,这可能会导致运行时错误。在这种情况下,您将把这些额外的键复制到data
这在这个函数中不是问题,但可能会在其他地方引起问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)