繁体   English   中英

打字稿共享函数重载

[英]Typescript share function overload

假设我有一个具有多个重载的函数。 有没有办法在不同的函数中“共享”相同的重载?

function getEmployee(id: number): Employee;
function getEmployee(email: string): Employee;
function getEmployee(email: number, name: string): Employee;
function getEmployee (paramOne: string | number, paramTwo?: string ): Employee { 
  return employee;
}

如果我想在其他函数中使用相同的重载,我需要手动复制所有这些重载。

如果要共享类型,可以执行以下操作:

interface GetEmployeeFunctionType {
    (id: number): Employee;
    (email: string): Employee;
    (email: number, name: string): Employee;
    (paramOne: string | number, paramTwo?: string): Employee;
}

然后你的新函数就像这样输入:

const newFunction: GetEmployeeFunctionType = (/** your parameters */) => {// implementation}

当您调用 newFunction 时,它会为您提供正确的智能感知。

根据@Kaca992 的回答,我认为应该以某种方式对其进行更改,因为最后一个签名不是重载签名而是实现签名。

interface GetEmployeeFunctionType {
    (id: number): Employee;
    (email: string): Employee;
    (email: number, name: string): Employee;
}

const newFunction: GetEmployeeFunctionType = (paramOne: string | number, paramTwo?: string): Employee => {/* implementation */}

另一方面,您始终可以创建一个高阶函数来包装签名:

interface GetEmployeeFunctionType {
    (id: number): Employee;
    (email: string): Employee;
    (email: number, name: string): Employee;
}

function wrap(func: (paramOne: string | number, paramTwo?: string) => Employee): GetEmployeeFunctionType {
    return func;
}

// usage:
const f = wrap((arg1, arg2) => {/* implementation */});

请参阅TypeScript Playgound

截至 2020 年 5 月,此案例的语法目前不可用 TypeScript 问题跟踪器中有相关问题:

尽管在Kaca992's answer 中有使用接口和调用签名的解决方法,但它们不会产生与您请求的语法相同的方法结构(并且在这些问题中提出)。

暂无
暂无

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

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