【发布时间】:2019-06-15 18:05:33
【问题描述】:
我正在处理一个遗留数据集,并且我正在尝试在 typescript 中对一些有意义的类型进行建模。在此示例中,假设我有来自员工课程的工作经验数据:
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
}
这对我来说非常不切实际,因为我必须明确地向记录添加一个未定义的值,只是为了让我的编译器满意。
我该如何设计这种类型的模型?
【问题讨论】:
标签: typescript type-systems domain-modelling