2016-11-25 33 views
1

我有以下功能:验证函数签名 - 接口VS类型别名

function (n: number) { 
    return {s: n}; 
} 

我需要创建的签名验证。从我读过,我有两个选择:

接口

interface ValidatorFnInterface { 
    (n: number): { 
     [key: string]: any; 
    }; 
} 

类型别名

type ValidatorFnType = (n: number) => { 
    [key: string]: any 
}; 

他们可以这样使用:

let f1: ValidatorFnInterface = function (n: number) { 
    return {s: n}; 
}; 

let f2: ValidatorFnType = function (n: number) { 
    return {s: n}; 
}; 

Typescript lib.d.ts似乎在使用类型别名,而angular2代码似乎在使用接口。我的问题是什么时候用什么?在决定时是否应该使用任何逻辑,还是偏好问题?

回答

3

目前班打字稿只能实现interfaces不是任意的类型。所以一般来说,如果你希望其他类能够使用你的类型来实现,你应该使用接口。同样可以只接口extend其他接口。

有关为接口消极的一面,他们无法表达路口或联合类型,所以如果你想在一个单一类型你坚持类型别名。

+0

谢谢,所以你说你会坚持接口函数签名验证? –

+0

@Maximus这取决于您的要求。我个人喜欢用类型别名来表示我的类型,因为它感觉更干净。但接口可能更安全,更可重用。 – Alex

+0

谢谢。语言中的类型别名是否比接口出现更晚?也许这就是为什么angular2使用接口的原因。另外,你可以说[this](http://stackoverflow.com/questions/13137350/defining-typescript-callback-type#comment47535906_14249517)评论? –