2017-05-30 92 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(见编辑零件上面的问题)? –