关于Typescript中使用interface定义函数类型的疑惑

interface FetchInstance {
  (config: {}): {}
  (url: string, config: {}): {}
}
const fetch1: FetchInstance = (config: {}) => ({}) // Ok
const fetch2: FetchInstance = (url: string, config: {}) => ({}) // Error

请问上述中的FetchInstance代表什么意思?我看这形式想当然的认为是函数重载,结果上面2处赋值出现问题。
如果要使得上面2处赋值同时成立,在不使用联合类型的情况下应该怎么定义FetchInstance?

阅读 4.2k
1 个回答

既然你知道 FetchInstance 代表的是一个具有重载的函数接口,那么实现显然也必须是重载的函数

interface FetchInstance {
    (config: {}): {};
    (url: string, config: {}): {}
}


// 定义具有两个重载的 fetch0
function fetch0(config: {}): {};
function fetch0(url: string, config: {}): {};
function fetch0(url: string | {}, config?: {}): {} {
    return ({});
}

// 赋值给 FetchInstance 类型的变量无压力
const fetch1: FetchInstance = fetch0;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进