Рассмотрим следующие примеры данных, представляющих магазины, содержащие списки ожидающих и выполненных идентификаторов заказов на покупку:
{
"shop-45": {
"FULFILLED": [55, 70]
},
"shop-46: {
"PENDING": [59, 54]
"FULFILLED": [100, 101]
}
}
Если в магазине нет ни ожидающих, ни выполненных заказов, он вообще не появляется в списке.
Я попытался представить это, используя следующее:
type Status = "PENDING" | "FULFILLED";
interface ShopList {
[shop: string]: {
[status in Status]: number[];
}
}
Неудивительно, что tsc
жалуется, когда у меня нет обоих PENDING
и FULFILLED
в качестве суб-свойств магазина.
Я подавил ошибку, сделав это свойство необязательным ([status in Status]?: number[]
), но я не думаю, что это действительно то, что я хочу сделать, , так как магазин никогда не будет иметь нулевых подсвойств .
Еще одна причудливая попытка выстрела в темноте [status in Partial<Status>]: number[];
жалуется аналогично.
Это мой единственный вариант, и просто не о чем беспокоиться?
Это тривиальный MCVE; настоящий гораздо сложнее и имеет больше слоев. Это (всегда?) Мотивирует использование обобщений вместо того, чтобы повторять каждое возможное имя ключа: перечисление используется как значения поля в других объектах.
Ссылки на TypeScript / Issues, обсуждающие похожие ситуации: 7374 | 19211 | 14934 | 5683 .