验证函数签名 - 接口与类型别名

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评论有什么想说的?

以上是关于验证函数签名 - 接口与类型别名的主要内容,如果未能解决你的问题,请参考以下文章

我可以验证给定的函数类型签名是不是具有潜在的实现吗?

PHP API接口签名验证

java注解怎么验证参数和签名

山东大学软件工程应用与实践——GMSSL开源库——SM9数字签名算法及验证的源代码分析

api接口签名验证

PHP开发API离不开签名验证,你是如何设计?