验证函数签名 - 接口与类型别名
Posted
技术标签:
【中文标题】验证函数签名 - 接口与类型别名【英文标题】:Validating function signature - interface vs type alias 【发布时间】:2017-04-10 01:40:21 【问题描述】:我有以下功能:
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 代码似乎使用了接口。我的问题是什么时候用什么?在决定时我应该使用任何逻辑还是偏好问题?
【问题讨论】:
Typescript: Interfaces vs Types的可能重复 【参考方案1】:目前 TypeScript 中的类只能实现 interfaces
而不是任意类型。所以一般来说,如果你希望其他类能够使用你的类型来实现,你应该使用接口。同样接口只能extend
其他接口。
对于接口而言,不利的一面是,它们不能表示交集或联合类型,因此,如果您希望在单一类型中使用这种类型,则只能使用类型别名。
【讨论】:
谢谢,那么你的意思是你会坚持使用接口进行函数签名验证? @Maximus 这取决于您的要求。我个人喜欢用类型别名来表达我的类型,因为它感觉更干净。但是接口可能是更安全的选择,并且更可重用。 谢谢。类型别名在语言中出现的时间比接口晚吗?也许这就是 angular2 使用接口的原因。另外,你对this评论有什么想说的?以上是关于验证函数签名 - 接口与类型别名的主要内容,如果未能解决你的问题,请参考以下文章