export type EventStatusType = {
Open: boolean;
Closed: boolean;
Maintaince: boolean;
};
EventTypes: {
Closed: false,
Maintenance: false,
Open: false
}
for (let key in eventTypes) {
if (eventTypes[key]) { // ТУТ ОШИБКА eventTypes[key]) - булевое значение
switch (key) {
case 'Open':
url = isFirst ? url.where('slss.EndDate', EMPTY, '') : url.or('slss.EndDate', EMPTY);
isFirst = false;
break;
case 'Closed':
url = isFirst
? url.where('slss.EndDate', GREATER_THAN, startDate.toISOString())
: url.or('slss.EndDate', GREATER_THAN, startDate.toISOString());
isFirst = false;
break;
case 'Maintenance':
url = isFirst
? url.where('slss.EventType', EQUAL, 'Maintenance')
: url.or('slss.EventType', EQUAL, 'Maintenance');
break;
}
}
}
let key: keyof EventStatusType;
for (key in eventTypes) {
Typescript не может автоматически вывести тип key
потому что он структурный, и никак не может знать, что в объекте точно нет ещё каких-нибудь ключей, кроме тех что указаны в типе EventStatusType
: const foo = {
Closed: false,
Maintaince: false,
Open: false,
внезапно: 'Вася'
};
const bar: EventStatusType = foo; // ok
Поскольку с помощью кода в начале ты фактически говоришь Typescript: "я знаю лучше, там точно не будет ничего другого", то на всякий непредвиденный случай следует добавить в switch
default
который что-то сделает(например кинет ошибку) если таки лишний неведомый ключ прилетит.Maintaince
и Maintenance
.