簡體   English   中英

如何在TypeScript接口中正確重載函數

[英]How to properly overload functions in typescript interfaces

我有以下界面

interface foo1 {
    add(num1: number, num2: number): number;
    subtract(num1: number, num2: number): number;
}

現在我創建一個形狀為foo1的對象

let myFoo1: foo1;

myFoo1.add(5, 6); // OK
myFoo1.subtract(5, 6); // OK

很好,現在我創建一個新接口,希望它充當第一個接口的擴展

interface foo2 {
    add(num1: number, num2: number, num3: number): number;
}

現在,我創建一個形狀為foo2的新對象

let myFoo2: foo2;

myFoo2.add(5, 6, 7); // OK
myFoo2.subtract(5, 6); // ERROR

foo2的界面上立足myFoo2讓我使用附加的“升級”版本,但現在我不能訪問函數

這是我想出的

let myFoo2: foo1 & foo2;

myFoo2.add(5, 6, 7); // OK
myFoo2.subtract(5, 6); // OK

現在,我可以使用較新版本的添加和訪問減法功能

這是做事情的正確方法還是我做錯了什么?

您可以通過將第三個參數設為可選來擴展foo1 ,這是因為-您可以將兩個三個參數傳遞給名為add的方法。 這使其與繼承的add方法兼容。

interface foo1 {
    add(num1: number, num2: number): number;
    subtract(num1: number, num2: number): number;
}

interface foo2 extends foo1 {
    add(num1: number, num2: number, num3?: number): number;
}

然后,您可以訪問foo1foo2所有成員。

var x: foo2;

x.add(1, 2);
x.add(1, 2, 3);
x.subtract(3, 1);

另外,您可以以其他方式分割接口,以便僅顯示您要提供的add方法:

interface foo {
    subtract(num1: number, num2: number): number;
}

interface foo1 extends foo {
    add(num1: number, num2: number): number;
}

interface foo2 extends foo {
    add(num1: number, num2: number, num3: number): number;
}

現在foo1foo2都具有相同的減法,但具有不同的add

var x: foo2;

// x.add(1, 2); not allowed now
x.add(1, 2, 3);
x.subtract(3, 1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM