use*_*315 1 javascript typescript
我对 TS 还很陌生......我有这种特殊类型:
export type MyType = {
high: {
age: number;
preview: [{ [key: string]: string | number }];
};
low: {
age: number;
preview: [{ [key: string]: string | number }];
};
medium: {
age: number;
preview: [{ [key: string]: string | number }];
};
};
Run Code Online (Sandbox Code Playgroud)
我通过数据对象键进行映射:
{Object.keys(data)
.map((item: string, key: number) => {
return (
data &&
data[item]?.preview && (
< component here >
)
);
})}
Run Code Online (Sandbox Code Playgroud)
数据类型是正确的,但 TS 抱怨“data[item]?.preview”。
它说:
元素隐式具有“any”类型,因为“string”类型的表达式不能用于索引类型“MyType”。在“MyType”类型上找不到带有“string”类型参数的索引签名。
谢谢
Tus*_*ahi 14
问题是由于 的键MyType只能有三个值:“medium”、“high”和“low”。
但您的项目是类型string,并且可以包含任何字符串。TS抱怨道。
现在你可能会认为你可以添加类似的东西
objKeys.map((item: keyof MyType, key: number) => {
Run Code Online (Sandbox Code Playgroud)
这应该有效。但是 TS withObject.keys()没有返回键数组,但仍然返回字符串数组。这个Github 线程表明这在未来不会改变。
因此,一种方法可能是添加一个中间步骤并使用as关键字对其进行类型转换:
{let objKeys = Object.keys(data) as Array<keyof MyType>
objKeys.map((item: keyof MyType, key: number) => {
return (
data &&
data[item]?.preview && (
< component here >
)
);
})}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17721 次 |
| 最近记录: |