如何在 TypeScript 中重载方法?

Posted

技术标签:

【中文标题】如何在 TypeScript 中重载方法?【英文标题】:How to overload method in TypeScript? 【发布时间】:2018-02-19 07:48:57 【问题描述】:

我有一个方法在签名中获取对象的参数。我想传递对象而不是传递给许多参数,另一方面,我不想更改现有方法的签名,因为它已经在多个地方使用。所以基本上我想要这两种方法。但是当我尝试编写代码时,它给了我错误Duplicate function implementation

    getSearchData(fetchData: FetchData,languageCode: string, sorting: string, maxResultCount: number, skipCount: number): Observable<PagedResultDtoOfFetchData> 

    getSearchData(dataLevel: number, codeType: number, dataCode: string, descLong: string, languageCode: string, dataParent: string, sorting: string, maxResultCount: number, skipCount: number): Observable<PagedResultDtoOfFetchData> 

仅供参考dataLevel, codeType, dataCode, descLong, dataParentfetchData 的属性。

【问题讨论】:

文档 - typescriptlang.org/docs/handbook/functions.html#overloads TypeScript function overloading的可能重复 @gsamaras 这就是我接受你的回答的原因。你不能强迫任何人投票。而且你抄袭了别人的答案 【参考方案1】:

Typescript 能够重载函数,但与其他 OOP 语言(例如 C++)相比,它具有一些特殊性。看着ref,尽管你的方法有不同数量的参数,我可以通过这样做来避免编译器错误:

class FunOverloadClass 
    getSearchData(dataLevel: number, codeType: number, dataCode: string, descLong: string, languageCode: string, dataParent: string, sorting: string, maxResultCount: number, skipCount: number): Observable<PagedResultDtoOfFetchData>;
    getSearchData(fetchData: FetchData, languageCode: string, sorting: string, maxResultCount: number, skipCount: number): Observable<PagedResultDtoOfFetchData>;

    getSearchData(stringOrNumberParameter: any, secondParam: any, thirdParam: any, fourthParam: any, fifthParam: any, dataParent?: string, sorting?: string, maxResultCount?: number, skipCount?: number): string 
        if (stringOrNumberParameter && typeof stringOrNumberParameter == "number")
            alert("Variant #1: numberParameter = " + stringOrNumberParameter);
        else
            alert("Variant #1: stringParameter = " + stringOrNumberParameter);
    

我使用了dataParent?: string,其中?: 运算符指定string 类型的名为dataParent 的参数是可选的

【讨论】:

以上是关于如何在 TypeScript 中重载方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TypeScript 中重载方法?

TypeScript:如何在 0.8.0.0 之后的版本中将 null 传递给重载函数?

TypeScript:如何在0.8.0.0之后的版本中将null传递给重载函数?

如何在 TypeScript 中实现的接口中进行构造函数重载?

如何在 TypeScript 的派生类中进行构造函数重载?

Typescript http.get 错误:没有重载匹配此调用