#typescript
#typescript
Вопрос:
Я создал вспомогательный тип, чтобы развернуть внутренний тип Observable<T>
:
type UnwrapObservable<T> = T extends Observable<(infer U)> ? U : never;
Это работает просто отлично. Но … моей следующей мыслью было: «Как я могу сделать этот тип полностью универсальным и применять его к любому типу, а не только к наблюдаемому, по существу Unwrap<T>
?
Вот что я попробовал:
type Unwrap<T, W> = T extends W<(infer U)> ? U : never;
Но я получаю:
Тип ‘W’ не является универсальным. ts(2315)
Как я могу создать тип, который разворачивает любой указанный тип?
Комментарии:
1. Я полагаю, вы хотите выразить типы более высокого типа , где
W
конструктор типа применяется к определенному типу, напримерW<*>
. Вы можете дать проблеме положительный результат, чтобы стимулировать ее разработку.
Ответ №1:
То, что вы пытаетесь сделать, невозможно в TS, но, насколько я знаю, это возможно в потоке)
В TS вы не можете применять ограничения для общего, который ожидает другого общего в качестве аргумента.
Это самый общий Wrap
тип
type Wrapp<T> = { wrapped: T }
type Unwrap<T> = T extends Wrapp<(infer R)> ? R : never
Пожалуйста, смотрите Здесь аналогичное ограничение