У меня есть функция, которая принимает объект option в качестве аргумента.
const newEvent = (option: Option): void => {
// does something with the config
}
Option
должен иметь несколько дополнительных и необязательных свойств.
interface Option {
host: string;
date: Date;
onStart?: () => any;
pizza?: boolean;
...
}
Он также должен иметь как минимум 2 дополнительных свойства, имя которых - Dynami c, а его значение соответствует форме AttendeeOption
.
interface AttendeeOption {
vip: boolean;
allergy?: string;
address?: string;
}
Интуитивно я попытался просто собрать их вместе:
interface Option {
host: string;
date: Date;
onStart?: () => any;
pizza?: boolean;
[name: string]: AttendeeOption
}
Использование такой подписи индекса строки не работает, поскольку теперь все свойства должны соответствовать типу AttendeeOption
.
Вторая попытка, я попытался пересечь Option
и Attendee
:
interface Attendee {
[name: string]: AttendeeOption
}
const newEvent = (option: Option & Attendee): void => {
// does something with the config
}
На данный момент ошибка интерфейса исчезла,
newEvent({
host: 'Professor Oak',
date: new Date(2021, 1, 3),
'Ash': {vip: true, address: 'Pallet Town'},
'Brock': {vip: true, address: 'Pewter City'},
'Misty': {vip: true, address: 'Cerulean City'},
})
При тестировании я получил ошибку в свойстве Ash
, Brock
, May
: Object literal may only specify known properties, and ''Ash'' does not exist in type 'Option'
Любая идея о том, как подойти к этому, была бы очень признательна. Спасибо!