[英]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;
}
然后,您可以訪問foo1
和foo2
所有成員。
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;
}
現在foo1
和foo2
都具有相同的減法,但具有不同的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.