Я пишу приложение React с использованием TypeScript.
Я написал оболочку для функции, которая выполняет вызов API:
import { ROUTE_CANDIDATES, ROUTE_TWIG_PICK } from "../../../config/constants/routes";
import { pickSchema } from "../../../config/schemas/picks";
import { PickCreateBulkResponse, PickCreateUpdateResponse } from "../../../config/types";
import { postRequest, putRequest } from "../../utils/serverRequests";
interface PickJSON {
candidate: string;
picked_int_choice: string;
}
const pickListSchema = [pickSchema];
export const postPickCreate = (
body: PickJSON | PickJSON[]
): Promise<PickCreateUpdateResponse | PickCreateBulkResponse> => {
if (Array.isArray(body)) {
return postRequest(ROUTE_CANDIDATES + ROUTE_TWIG_PICK, body, pickListSchema) as Promise<
PickCreateBulkResponse
>;
} else {
return postRequest(ROUTE_CANDIDATES + ROUTE_TWIG_PICK, body, pickSchema) as Promise<
PickCreateUpdateResponse
>;
}
};
Как видите, я пытаюсь динамически утверждать правильный тип ответа. То есть, если функция использовалась с массивом, она должна возвращать Promise<PickCreateBuldResponse>
, тогда как если она использовалась с одним объектом, она должна возвращать Promise<PickCreateUpdateResponse>
. Как я могу получить TypeScript, чтобы знать, что он возвращает? Как вы можете видеть выше, я попытался использовать as
, но это не работает.