#typescript #typescript-typings
#typescript #typescript-типизации
Вопрос:
в зависимости от типа параметра я хотел бы ввести возвращаемое значение. Аналогично перегрузке функции, но с использованием сопоставленных типов.
const requestX = async(
id?: string | undefined,
): Promise<(typeof id) extends string ? X: X[]> =>
fetch(......)
Однако возвращаемое значение всегда вводится как X[]
. Как правильно это сделать?
Комментарии:
1. Перегрузки — это путь сюда. Вы можете заставить это работать с условными типами только тогда, когда указан параметр typescriptlang.org/play ? #code / …
Ответ №1:
Если вы не используете перегрузки, как предложил Алексей Л., вам нужен аргумент универсального типа, в противном typeof id
случае он разрешается статически string | undefined
, что не помогает в сопоставлении.
Общий пример:
const requestX = async <ID extends string | undefined = undefined>(id?: ID)
: Promise<ID extends string ? X : X[]> =>
fetch(...);
const x = requestX() // Promise<X[]>
const y = requestX('123'); // Promise<X>