【发布时间】:2019-05-30 22:58:54
【问题描述】:
我有一个基本界面:
interface Basic {
[key: string]: {
data: string;
};
}
另一个扩展它的接口:
interface Another extends Basic {
'onekey': OneKeyData;
'secondkey': SeconKeyData;
}
我的问题是当使用通用T extends keyof Another 时,由于基本接口,它允许任何字符串键。 OneKeyData 和 SecondKeyData 它们都包含 data 属性,与 Basic 中一样。如果extends Basic 没有在其他地方使用,我会删除它:
interface Options<TKey extends keyof Another> {
field: Another[TKey]['data'];
}
在这种情况下,最好的解决方案是什么?是否可以只获取keyofAnother接口?
【问题讨论】:
-
您对
Options的定义目前是多余的,因为Another[TKey]['data']现在总是计算为string。在您的实际代码中是否存在不是这种情况的实例? -
你真的需要
Basic吗?到目前为止,您的 sn-ps 表明您可以只用Record<string, string>替换整个数据结构。 -
我不明白你的用例是什么,但如果你正在寻找一种方法来获取接口的已知键(即,没有
string),you can do it .如果那是您想要的,我倾向于将其作为副本关闭。否则,请清楚说明您要完成的工作。
标签: typescript generics