ユニオンタイプのプロパティにアクセスするための慣習的な方法は、ユニオンでマージされたタイプの1つに欠けている可能性がありますか?次のエラーでユニオンタイプのプロパティにアクセスするための慣用的方法
type DataColumn = {
value: number;
};
type CalculatedColumn = {
calculation: string;
};
type Column = DataColumn | CalculatedColumn;
function getValue(c: Column) {
return c.value || c.calculation;
}
フローtypecheck結果:
function e() {
throw new Error('foo');
}
function getValue(c: Column) {
return c.value || c.calculation || e();
}
:
13: return c.value || c.calculation;
^property `calculation`. Property not found in
13: return c.value || c.calculation;
^object type
@dfkayeは "デフォルト" の場合のためにスローされたエラーがある場合は、それが動作することをTwitter上で指摘しました
誰かが説明できる:
- なぜ動作するのですか?それは意図的なものか副作用ですか?
- なぜ必要なのですか?列の型は常に
value
またはcalculation
のいずれかであるため、エラーは発生しません。 - より良い、より慣用的な方法がありますか?
- これは安全なアプローチですか、それとも将来的に破損する可能性がありますか?
PS:タイプアサーションを使用するタイプスクリプトit can be doneのようです。
はい、データは変更したくありません(少なくとも、まだ)。 – dkl