2017-05-30 199 views
0

我想知道什麼foobar之間的差異是在以下接口:差異函數和方法

interface Test 
{ 
    foo(value: number): string; 
    bar: (value: number) => string; 
} 


let x: Test = { 
    foo: (i) => "", 
    bar: (i) => "", 
}; 

我的明顯,第一個是方法,而第二個是一個屬性,但這是否在語義上相同?

編輯:

它似乎並不完全等效。至少在構造函數方法now只有第一個語法似乎是有效的:

class Test 
{ 
} 

interface TestConstructor 
{ 
    new(): Test; 
} 

const activator = function(type: TestConstructor) 
{ 
    return new type(); // fine 
} 

interface TestConstructor2 
{ 
    new:() => Test; 
} 

const activator2 = function(type: TestConstructor2) 
{ 
    return new type(); // Error: Cannot use 'new' with an expression whose type lacks a call or construct signature. 
} 

回答

0

他們都是等價的。第一個(foo(value: number): string;)僅爲第二個語法糖(foo: (value: number) => string;)。要定義一個高層次的功能,因此這是非常有用的情況下:

function test(myFunction: (value: number) => string)

+0

但你能解釋的差異,當涉及到的'''new'''keyword(見編輯零件上面的問題)? –