假设我有一个具有多个重载的函数。有什么办法可以在不同的功能中“共享”相同的重载?
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;
}
如果要在其他函数中使用相同的重载,则需要手动复制所有重载。
答案 0 :(得分:0)
如果您要共享类型,可以执行以下操作:
//about-us page
<ion-header>
<ion-navbar>
<ion-title>{{"About_The_School" | translate}}</ion-title>
</ion-navbar>
</ion-header>
<ion-content *ngIf="aboutUsData">
<div margin-top text-center class="school_img">
<img [src]="aboutUsData.school_logo">
<h4>{{aboutUsData.school_name}}</h4>
<p>{{aboutUsData.about_text}}</p>
</div>
</ion-content>
然后您的新函数只需像这样键入它:
interface GetEmployeeFunctionType {
(id: number): Employee;
(email: string): Employee;
(email: number, name: string): Employee;
(paramOne: string | number, paramTwo?: string): Employee;
}
调用newFunction时,它将为您提供正确的智能提示。
答案 1 :(得分:0)
根据@ 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
答案 2 :(得分:0)
截至2020年5月,此情况的语法当前不可用。 TypeScript问题跟踪器中存在相关问题:
尽管在Kaca992's answer中有使用接口和调用签名的变通办法,但它们的方法结构与您要求的语法(在这些问题中提出的)不同。