Typescript: как извлечь тип из объединения блоков?

#typescript #typescript-generics

#typescript #typescript-дженерики

Вопрос:

У меня есть некоторый тип блока и объединение, которое включает в себя как значения в штучной упаковке, так и необработанные значения. Как я могу извлечь типы в штучной упаковке?

 class Box<T> {};
type United = Box<number> | Box<string> | boolean;
type Unboxed<T> = ???
type ExtractUnited = Unboxed<United>; // number | string
 

Комментарии:

1. @KevinJohnson как это будет работать?

Ответ №1:

Во-первых, вы должны использовать T внутри своего Box класса:

 class Box<T> {
    constructor(public value: T) {}
};
 

Во-вторых, объявить Unboxed<T> как:

 type Unboxed<T> = T extends Box<infer U> ? U : never;
 

Ссылка на игровую площадку