[英]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 */});
截至 2020 年 5 月,此案例的语法目前不可用。 TypeScript 问题跟踪器中有相关问题:
尽管在Kaca992's answer 中有使用接口和调用签名的解决方法,但它们不会产生与您请求的语法相同的方法结构(并且在这些问题中提出)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.