【发布时间】:2020-11-13 06:04:48
【问题描述】:
在 TypeScript 中是否可以根据函数的参数确定函数的返回类型? 如果您想从例如获取属性的子集,这将很有帮助。数据库查询。
这是一个示例 (https://repl.it/repls/IrresponsibleUnsightlySequences#index.ts):
type QueryReturnType = {
a: string;
b: number;
c: boolean;
};
const queryFunc = (): QueryReturnType => {
return {
a: 'b',
b: 1,
c: true,
};
};
type Params = {
[key: string]: keyof QueryReturnType;
};
const takeQuerySubset = (params: Params) => {
const res: any = {};
Object.keys(params).map((key) => {
res[`${key}`] = queryFunc()[params[key]];
});
return res;
};
takeQuerySubset({ test1: 'a' }); // { test1: 'b' }
takeQuerySubset({ test2: 'b' }); // { test2: '1' }
takeQuerySubset({ test3: 'b', test4: 'c' }); // { test3: '1', test4: true }
这可行,但是 takeQuerySubset 的类型是:(params: Params) => any,而目标是获得基于参数的返回类型,即:
takeQuerySubset({ test1: 'a' }); // return type should be {test1: string}
takeQuerySubset({ test2: 'b' }); // return type should be {test2: number}
takeQuerySubset({ test3: 'b', test4: 'c' }) // return type should be {test3: number, test4: boolean}
这样使用 takeQuerySubset 的另一个函数就可以可靠地确定它将返回什么。
为了摆脱any,我尝试了泛型,但到目前为止没有运气。
另请注意,变量已重命名,即 a 现在称为 test1,b 是 test2,等等。
【问题讨论】:
标签: typescript types typescript-typings