Ответ @aopanasenko в порядке. Я хочу завершить его, добавив способ решения проблемы нескольких спецификаций.
Если свойства available
невелики, а они фиксированы и стабильны, то вы можете подумать о перечислении их всех. в интерфейсе Delivery
:
interface Delivery<T extends DeliveryMethod, U extends DeliveryMethod> {
available: { [key : string] : Array<T | U>};
};
Затем вы можете определить объект delivery
следующим образом:
const delivery: Delivery<Pickup, Courier>
Если вы не знаете свойства априори, тогда вы Мне нужен способ связать имя свойства с типом TypeScript, например, я добавил объект available
только для отображения:
interface Delivery {
available: { [key: string]: Array<DeliveryMethod> | null };
};
const delivery: Delivery = {
available: {}
}
const available: {
pickup: Pickup[] | null,
courier: Courier[] | null
} = {
pickup: null,
courier: null
};
delivery.available = { ...delivery.available, ...available };
Таким образом, он правильно проверен на тип. Я также добавил | null
, чтобы привести пример, вы можете удалить его.