我正在针对web api进行编程,对于某些字段,只有在查询中指定它们时才会返回它们。
{a:"hello", b:"world", c:"of goo", d:"i am always present"}
我打电话给
api.getResponse(["a","b"])
我会得到
{a:"hello", b:"world", d:"i am always present"}
作出回应。
我如何用打字稿的类型语言表达?
答案 0 :(得分:2)
您可以在单独的界面上声明始终存在和可选字段,然后使用Pick
选择正确的字段:
interface AlwaysPresentFields {
d: string;
}
interface OptionalFields {
a: string;
b: string;
c: string;
}
type ApiResponse<F extends keyof OptionalFields> = AlwaysPresentFields & Pick<OptionalFields, F>;
function getResponse<F extends keyof OptionalFields>(fields: F[]): ApiResponse<F> {
// Implementation
}
答案 1 :(得分:0)
在高级类型脚本中,我们可以使用部分,选择,只读。
根据您的情况,可以使用 keyof,部分 。也可以使用 Pick 来实现相同的目的:docs
interface IResponse {
a: string;
b: string;
c: string;
d: string;
}
const getResponse = (responseKeys: Array<keyof IResponse>): Partial<IResponse> => {
const responseWithFilteredKeys: Partial<IResponse> = {};
const response: IResponse = {
a: 'a',
b: 'a',
c: 'a',
d: 'a',
};
responseKeys.forEach((key: keyof IResponse) => {
responseWithFilteredKeys[key] = response[key];
});
return responseWithFilteredKeys;
};
const filterdUserResponse: Partial<IResponse> = getResponse(['a', 'b']);