Я имею дело с устаревшим набором данных и пытаюсь смоделировать некоторые значимые типы в машинописи. Предположим, что в этом примере у меня есть данные об опыте работы из учебной программы для сотрудников:
EMPLOY | START | END
'my first employ' | 20180901 | 20181001
'my last employ' | 20180901 | null
Если END
равно null
, это означает, что это фактическое использование. Поскольку у меня есть несколько бизнес-правил, касающихся этой концепции домена, я бы хотел смоделировать ее с типами. Вот мой код:
interface ActualExperience {
actual: true,
employ: string,
start: Date,
end: undefined // <-- no end!
}
interface PreviousExperience {
actual: false,
employ: string,
start: Date,
end: Date // <-- end has a value!
}
type Experience = ActualExperience | PreviousExperience
Пока все хорошо. Тогда я хочу использовать свои типы:
// this is OK
const previous: PreviousExperience = {
actual: false,
employ: 'my first employ',
start: new Date(),
end: new Date()
}
// ERROR!
const actual: ActualExperience = {
actual: true,
employ: 'my last employ',
start: new Date()
}
Typescript требует от меня явного определения end: undefined
для сопоставления с ActualEmploy
:
// this is OK now!
const actual: ActualExperience = {
actual: true,
employ: 'my last employ',
start: new Date(),
end: undefined
}
Это очень непрактично для меня, так как я должен явно добавить неопределенное значение в запись только для того, чтобы сделать мой компилятор счастливым.
Как мне спроектировать такую модель?