Как стать автором
Обновить

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

Смотрю на слово "extends" вместо значка ⊂ (является подмножеством) в применении к второму аргументу Pick и грущу.

Наиболее любопытный момент всей истории - extends для параметра ApiGetter в типизации хука useApi. Эта штука позволяет "заморочить голову" тайпскрипту и выключить проверку возможности вызова для api(config ?? {}, params ?? {})[ method ] (...), в чем легко убедиться - result имеет тип any. По факту "методом" может оказаться любое значение, но если это не функция, то для её вызова понадобится аргумент типа never, т.е. вызвать нельзя, TS тут защищает не напрямую, но косвенно. Для более явного ограничения можно написать

Method extends {
    [K in keyof ReturnType<ApiGetter>]: ReturnType<ApiGetter>[K] extends (...args: never[]) => Promise<HttpResponse<unknown>> ? K : never;
  }[keyof ReturnType<ApiGetter>],

и теперь в method станет дозволено передать только такое название поля, за которым стоит функция, возвращающая промис HttpResponse

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации