ts怎么定义对象中函数的接口?

怎么定义一个对象中所有方法的接口?
这些方法都是一样的参数和返回值。
类似这种意思,但是编辑器报错了:

interface Api {
    (data:object):AxiosPromise<any>
}

const api:Api = {
    login(data) {
        return ajax('/login', {
            method: 'post',
            data,
        })
    },
}
阅读 2k
2 个回答

用索引签名:

interface Api {
    [key: string]: (data: object) => AxiosPromise<any>;
}

但不建议这么做,因为 Api 下面有哪些 Key 就失去约束了。


如果你提前可以枚举出来有哪些 Key,那么可以:

type ApiNames = 'login' | 'foo' | 'bar';
type Api = Record<ApiNames, (data: object) => AxiosPromise<any>>;

或者:

const ApiNames = ['login', 'foo', 'bar'] as const;
type Api = Record<(typeof ApiNames)[number], (data: object) => AxiosPromise<any>>;

最“笨”也不过是:

type ApiFunc = (data: object) => AxiosPromise<any>;
interface Api {
    login: ApiFunc;
    foo: ApiFunc;
    bar: ApiFunc;
}

你漏写了函数名。

interface Api {
    login (data: object): AxiosPromise<any>;
}

const api: Api = {
    login (data) {
        return ajax('/login', {
            method: 'post',
            data,
        })
    },
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进