例如,我有一個接口:如何擴展Typescript接口?
interface Foo {
value1: number;
value2: number;
}
我想補充一點,會給我值的總和在此接口的任何實例之和()方法。什麼是打字稿的做法?
我需要能夠寫一個函數是這樣的:
function printFooSum(foo: Foo) {
console.log(???);
}
和功能不應涉及到一些其他類Foo屬性手動分配。
例如,我有一個接口:如何擴展Typescript接口?
interface Foo {
value1: number;
value2: number;
}
我想補充一點,會給我值的總和在此接口的任何實例之和()方法。什麼是打字稿的做法?
我需要能夠寫一個函數是這樣的:
function printFooSum(foo: Foo) {
console.log(???);
}
和功能不應涉及到一些其他類Foo屬性手動分配。
一種方式做到這一點是:
interface Foo {
value1: number;
value2: number;
}
class Foo {
public static sum(foo: Foo) {
return foo.value1 + foo.value2;
}
}
function printFooSum(foo: Foo) {
console.log(Foo.sum(foo));
}
但也許還有一個更優雅的方式......
P.S.在實踐中,採取了爲接口實例創建一個包裝器並在包裝器上調用該函數。 –
通過extends
關鍵字擴展接口打字稿:
interface Foo {
value1: number;
value2: number;
}
interface Bar extends Foo {
sum() : number;
}
實現的接口方式如下:
class Baz implements Bar {
public value1: number;
public value2: number;
sum() : number { return this.value1 + this.value2; }
}
var bar : Bar = new Baz();
注:implements Bar
部分是可選的。 Baz
的實例仍然可以分配給Bar
插槽,因爲它們具有所需的屬性。但是,添加implements Bar
將強制編譯器檢查Baz
類實現Bar
接口,如果不是,則會在Baz
上拋出編譯時錯誤。
我認爲你可以這樣做:
interface Foo1 extends Foo {
suma(): number
}
interface Foo{
value1: number;
value2: number;
}
http://www.typescriptlang.org/docs/handbook/interfaces.html#extending-interfaces
您補充一點:
我需要能夠寫出這樣的功能:
function printFooSum(foo: Foo) {
console.log(???);
}
但這部分不理解得好:
和功能不應涉及FOO的手動分配 性質一些其他類。
你不想這樣做?
function printFooSum(foo: Foo) {
console.log(foo.value1 + foo.value2);
}
@SergeyAldoukhov對不起,但這部分不太理解 - >和函數不應該涉及foo屬性手動分配給其他類。也許是因爲我的英文不好,但這會幫你 –
爲什麼?有人可以向我解釋爲什麼? downvote –
我需要帶班,我不控制工作。它們中有多個,唯一共同的是所有實現通用接口。 –