@fsmrdv

Как переписать дженерик TypeScript?

Всем привет!

Есть вот такой дженерик.
export type SomeDeclaration<ParamsData, ResponseData> = {
    (params: ParamsData): SomeOtherType;
};

ResponseData внутри нигде не использовали и тайпскрипт при компиляции проигнорирует ее.

Вот тут мы уже не сможем ее извлечь
type ExtractSomeDeclarationResponseDataType<T> = T extends SomeDeclaration<infer P, infer D>
    ? D
    : any;


Если ResponseData продублировать внутри, то все заработает (пример ниже), но хочется найти более чистое решение.

export type SomeDeclaration<ParamsData, ResponseData> = {
    (params: ParamsData): SomeOtherType;
    _r: ResponseData
};


Какое решение можете предложить?

UPD Проблема наблюдается в 4 версии тайпскрипта
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ответы на вопрос 2
Alexandroppolus
@Alexandroppolus
кодир
"typescript": "3.8.3"

всё извлекается, даже если не использовать ResponseData. Но вот зачем указывать этот неиспользуемый параметр, я так и не понял
Ответ написан
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
Все работает, Вы делаете что-то не то
https://www.typescriptlang.org/play?#code/C4TwDgpg...

А вообще, неиспользуемый аргумент дженерика ради дальнейшего infer - это лютая дичь, наверняка можно сделать по другому, могу даже помочь с этим если расскажите подробности
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы