【发布时间】:2021-10-21 15:59:57
【问题描述】:
我有一个这样创建的 JavaScript 对象。
const meta = {
baz: null
}
const response = {
foo: 1,
bar: {
foo: 2,
buzz: {
foo: 3,
...meta
},
...meta
},
...meta,
qux: ‘qux’
}
响应对象是一个可以包含任何键的普通对象。我们知道键的类型foo、baz 和qux。我们不知道其他键名,但是当它们确实存在时,它们是具有已知接口的对象。其实response对象就是这个接口的一个实例。
如何创建表达这种逻辑的 TypeScript 界面?我希望编译器允许定义这样的对象:
const foo: MyInterface = {
foo: 1,
dynamicKey: {
baz: null
}
}
【问题讨论】:
-
索引签名不起作用吗? (考虑用
[key: string]: KnownInterface替换dynamicKey) -
如果您对this limitation 没问题,索引签名可能会起作用。否则,我认为您想要this question,其中答案被翻译为“
MyInterface的字典,但具有一组其他类型的已知键”。当我得到它时,我可以做到。 -
感谢@jcalz,诀窍是像您在示例中向我展示的那样扩展索引签名界面。
标签: javascript typescript types interface