【发布时间】:2020-05-03 23:02:44
【问题描述】:
我有一堆内置在对象文字中的数据。这个对象的键也存在于这个对象的每个子对象中,我想用打字稿来强制执行:
type People = {[NAME in string]: { name: NAME; age: number }};
const people: People = {
Jeff: { name: "Jeff", age: 30 },
Fred: { name: "Freddy", age: 25 }, // no error, name evaluates to string
Sally: { name: "Sally", age: 35 },
};
过去我使用字符串联合做过类似的事情:
type People = {[NAME in "Jeff" | "Fred" | "Sally"]: { name: NAME; age: number }};
const people: People = {
Jeff: { name: "Jeff", age: 30 },
Fred: { name: "Freddy", age: 25 }, // ERROR: Type '"Freddy"' is not assignable to type '"Fred"'. ts(2322)
Sally: { name: "Sally", age: 35 },
};
但是对于我当前的用例来说,除了对象之外维护一个单独的联合类型是多余的。
是否可以在该对象的子对象中使用索引对象的键类型?
【问题讨论】:
-
您当前的用例是什么?我不知道这是否可行,但如果不可行,我也不会太惊讶——这样复制感觉就像糟糕的设计。
-
@gqstav 我正在尝试将类型添加到 JSON 中定义的现有模式格式中。它使用匹配的键和
typename属性在一个平面对象中定义其所有类型。
标签: typescript