2016-03-29 125 views
0

例如,我有一個接口:如何擴展Typescript接口?

interface Foo { 
    value1: number; 
    value2: number; 
} 

我想補充一點,會給我值的總和在此接口的任何實例之和()方法。什麼是打字稿的做法?

我需要能夠寫一個函數是這樣的:

function printFooSum(foo: Foo) { 
    console.log(???); 
} 

和功能不應涉及到一些其他類Foo屬性手動分配。

+0

我需要帶班,我不控制工作。它們中有多個,唯一共同的是所有實現通用接口。 –

回答

0

一種方式做到這一點是:

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)); 
} 

但也許還有一個更優雅的方式......

+0

P.S.在實踐中,採取了爲接口實例創建一個包裝器並在包裝器上調用該函數。 –

0

通過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上拋出編譯時錯誤。

-1

我認爲你可以這樣做:

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); 
} 
+0

@SergeyAldoukhov對不起,但這部分不太理解 - >和函數不應該涉及foo屬性手動分配給其他類。也許是因爲我的英文不好,但這會幫你 –

+0

爲什麼?有人可以向我解釋爲什麼? downvote –