【发布时间】:2019-04-09 15:14:51
【问题描述】:
我正在使用 TypeScript 编写一个 React 应用程序。
我为一个调用 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,但这不起作用。
【问题讨论】:
标签: reactjs typescript typescript-typings typescript-types