![](/img/trans.png)
[英]In TypeScript, how do I make a function's return type based on the return type of one of its arguments?
[英]How do I get typescript to infer the return type of a function based on the return type on a function of its arguments
所以这个 function 应该接受满足interface TransactionActionModel
的对象数组。 这意味着它们都必须有一个名为“save”的 function 接收interface SaveOptions
。
目前这个saveUsingTransaction
function 的返回类型是Promise<any[]>
。
interface TransactionActionModel {
save: ({ session }: SaveOptions) => any;
}
const saveUsingTransaction = async (
newEntities: TransactionActionModel[]
) => {
const returnsArray = [];
// Create Transaction
const session = mongoDBWrapper.client.startSession();
try {
// Start Transaction
session.startTransaction({});
for (const entity of newEntities) {
const resolve = await entity.save({ session });
returnsArray.push(resolve);
}
// End Transaction
await session.commitTransaction();
return returnsArray;
} catch (error) {
await session.abortTransaction();
throw error;
} finally {
await session.endSession();
}
};
有没有办法让saveUsingTransaction
的返回类型与我传递到saveUsingTransaction
的实体上的保存 function 的返回类型相匹配。
For Example
const person = {
phone: "0233224444",
save: ({session}):Person => {
return this
}
}
const cat = {
weight: "30kg",
save: ({session}): Animal => {
return this
}
}
const results = saveUsingTransaction([person, cat])
the type on the results variable should be ==> "[Person, Animal]"
您的界面应该是通用的:
interface TransactionActionModel<T> {
save: ({ session }: SaveOptions) => T;
}
以及您的 function:
const saveUsingTransaction = async <A extends TransactionActionModel<any>[]>(
newEntities: [...A]
): { [K in keyof A]: ReturnType<A[K]["save"]> } => {
使用[...A]
将A
推断为一个元组,然后通过映射其元素并将它们更改为它们保存 function 的返回类型,在返回类型中使用该元组。 TypeScript 将在[...A]
的接口中推断泛型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.