У меня есть куча данных, которые встроены в литерал объекта. Ключи этого объекта также существуют в каждом из дочерних объектов этого объекта, и я хотел бы применить это с помощью машинописи:
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 },
};
Но для моего текущего варианта использования поддержание отдельного типа объединения в дополнение к объекту было бы чрезмерным.
Можно ли использовать тип ключа из индексированного объекта в дети этого объекта?