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