繁体   English   中英

在Typescript中,如何实现带有重载的裸功能接口?

[英]In Typescript, how can I implementing bare function interface with overloads?

我正在使用Typescript 2.3.3

我正在尝试为我正在编写的一些代码创建一个很好的API,所以我正在尝试使用Typescript的泛型。

我希望能够使用泛型类型调用函数,并使用该类型向用户提供选择,其中一些可能是具有不同签名的函数。

到目前为止,这是我的尝试。

我声明了一个带有两个裸函数签名的接口(我想向开发人员提供的两个选项):

interface api<T1> {

  <T2>(second: T2):  {
    first: T1
    second: T2;
  };

  <T2, T3>(second: T2, third: T3):  {
    first: T1
    second: T2;
    third: T3;
  };

}

我创建了一个包含每个函数签名的实现的函数,使用传递给它的泛型类型参数:

const test = <TFirst>(first: TFirst) : api<TFirst> => {

  const impl1 = <T2>(second: T2) => ({
    first, second
  });

  const impl2 = <T2, T3>(second: T2, third: T3) =>({
    first, second, third
  });

  return ...?
};

但是,我不知道在哪里分配这些实现或如何创建符合api规范的返回对象。

这甚至可能吗?

这是可能的。 你可以这样做:

interface api<T1> {

  <T2>(second: T2):  {
    first: T1;
    second: T2;
  };

  <T2, T3>(second: T2, third: T3):  {
    first: T1;
    second: T2;
    third: T3;
  };
};

function createApi<T1>(first: T1): api<T1> {

  function impl<T2>(second: T2): { first: T1; second: T2; };
  function impl<T2, T3>(second: T2, third: T3): { first: T1; second: T2; third: T3; };
  function impl<T2, T3>(second: T2, third?: T3): { first: T1; second: T2; third?: T3; } {
    if (third === undefined) {
      return { first, second };
    }
    return { first, second, third };
  }

  return impl;
}

const test = createApi<number>(1);
console.log(test(2));
console.log(test(2, 3));

createApi函数只返回一个内部重载函数。

有关TypeScript重载的更多信息,请参阅文档重载”部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM