'type1' | 'type2';
type Data1 = 'data1';
type Data2 = 'data2';
type ExtractDataType<T> = T extends 'type1'
? 'data1'
: T extends 'type2'
? 'data2'
: never;
type Block<T> = {
data: ExtractDataType<T>;
type: T;
};
type Blocks = Block<BlockType>[];
const blocks: Blocks = [];
blocks.map(x => {
if (x.type === 'type1') {
const data = x.data;
}
});
сейчас в data показывает, что может быть тип data1 | data2, хотя я ожидаю, что используя ExtractDataType будет выведен однозначно тип data1, так как выше делать if (x.type === 'type1')
возможно ли как-то добиться того, что я хочу?
а сделать dicsriminated union структур у вас есть возможность? https://www.typescriptlang.org/play/#code/C4TwDgpgBAIghsOBGKBeKByAJg5GDcAUKJLLgExqY6LkGHHjQBCANgPYDGA1moVAB8oAbyg04ALjKIk+KCQhSMCpASgBfKPyGjxU+LQA08pkoV056oo1Jsu3AM5U7PANoBda53YA7B8CgAIw4eBykXRyoPa2D7BwA6AFs4MAAKAA80AD4RfigASwAzKAz4hTRUdGUmVQBKXKhGqG8-APEqdPjxIkb1QnVaoiA
Обсуждают сегодня