具有函数返回类型的TypeScript接口

阿穆里姆

假设我有5个简化函数,首先将Api用于进行调用对象作为参数,将第二个(可选)参数作为api调用本身的参数。

// functions.ts
function f1 (api: Api) {
  return () => { // returns a Promise<string> }
}

// some other functions

function f5 (api: Api) {
  return (id: number) => { // returns a Promise<number> }
}

现在,我想创建一个具有这种类型的对象:

{
  f1: () => Promise<string>
  // ...
  f5: (id: number) => Promise<number>
}

这是我所做的:

import * as functions from './functions';

const api = new Api(); // Define the Api object here

const withApi = Object.keys(functions).reduce((result, key) => {
  result[key as keyof typeof functions] = functions[key as keyof typeof functions](api)
}, {} as /* What type should i put here??? */);

我能找到的最好的东西/* What type should i put here??? */{ [index:string]: Promise<any> },这根本不能令人满意。

提香·切尔尼科娃·德拉戈米尔

您可以创建一个映射类型,该类型将包含原始函数对象中所有键的键,但它们的类型与每个函数的返回类型相同(使用条件类型提取ReturnType<T>

type AllReturnTypes<T extends Record<keyof T, (...a: any) => any>> = {
    [P in keyof T]: ReturnType<T[P]>
}
const withApi = Object.keys(functions).reduce((result, key) => {
    result[key as keyof typeof functions] = functions[key as keyof typeof functions](api)
    return result;
}, {} as AllReturnTypes<typeof functions>);

withApi.f1();
withApi.f5(10);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有泛型的TypeScript接口函数类型

Typescript接口作为函数返回类型

具有多种返回类型的接口方法

继承具有改进的返回类型的接口

具有返回类型和SOLID的接口

Typescript - 在具有条件返回类型的函数中返回特定类型

具有返回类型的Typescript查找类型

Typescript返回一个函数,该函数返回具有类型约束的组件

为什么BiConsumer函数接口接受具有返回类型的方法

使用接口的键为对象建立索引,而值是具有键的返回类型的函数

具有相同类型属性的接口或类型的 Typescript 简写

Typescript函数,该函数从具有正确类型的数组中返回一项

Typescript - 使函数返回类型成为接口实现的类

Typescript 根据参数强制函数返回类型为接口的键

Kotlin:如果E是实现接口I的枚举类,则从具有返回类型Array <I>的函数返回Array <E>

具有通用返回类型的函数

具有不同返回类型的函数指针

具有多种返回类型的函数

具有未知返回类型的标准函数

具有不同返回类型的C ++函数

具有get函数的Typescript类型

空在具有不同类型的返回功能接口

返回具有通用类型的接口时出错

Typescript实现具有相同键但类型不同的接口

Typescript-具有映射类型的Mock接口

具有类型或接口的TypeScript分解的默认参数

从TypeScript中的函数返回对象(具有特定键,值类型)

TypeScript 接口/函数签名类型

如何返回具有通用类型的类实例作为具有通用类型的接口?