访问联合中合并的类型之一中可能缺少的联合类型属性的惯用方法是什么?
type DataColumn = {
value: number;
};
type CalculatedColumn = {
calculation: string;
};
type Column = DataColumn | CalculatedColumn;
function getValue(c: Column) {
return c.value || c.calculation;
}
流类型检查导致以下错误:
13: return c.value || c.calculation;
^ property `calculation`. Property not found in
13: return c.value || c.calculation;
^ object type
@dfkaye在 twitter 上指出,如果“默认”情况下出现错误,它会起作用:
function e() {
throw new Error('foo');
}
function getValue(c: Column) {
return c.value || c.calculation || e();
}
有人可以解释一下:
- 为什么它有效?是故意的,还是副作用?
- 为什么有必要?列类型始终为
value
orcalculation
,因此永远不会发生错误情况。 - 有没有更好、更惯用的方法?
- 这是一种安全的方法,还是将来可能会中断?
PS:似乎在 TypeScript中可以使用类型断言来完成。