1
のは、私は次の型マップを持っているとしましょう:インデックス付きの型マップを識別された共用体に展開できますか?
type MyTypes = {
'float': number;
'text': string;
'bool': boolean;
'price': number;
'date': Date;
};
そして、私は自動的にそのための差別組合の種類を生成します。これの同等:そうのように使用することができ
type Datum<K, V> = { type: K, value: V };
type MagicUnionMaker<TypeMap> = (
// pretend the below is auto-generated from TypeMap
Datum<'float', number> |
Datum<'text', string> |
Datum<'bool', boolean> |
Datum<'price', number> |
Datum<'date', Date>
);
:
interface DataModel<TypeMap> {
data(row: number, col: number): MagicUnionMaker<TypeMap>;
}
let model: DataModel<MyTypes>;
let datum = model.data(0, 0);
switch (datum.type) {
case 'float':
// datum.value is `number`
break;
case 'text':
// datum.value is `string`
break;
case 'bool':
// datum.value is `boolean`
break;
case 'price':
// datum.value is `price`
break;
case 'date':
// datum.value is `Date`
break;
case 'thing': // error
break;
}
この現在可能のようなものですか?
AFAIKをユニオンにマッピングすることはできません(まだ)。私は組合の部分が人間によって書かれなければならないと思う。 – Jokester