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

时间:2016-11-25 15:54:59

标签: typescript

我有以下功能:

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代码似乎使用接口。我的问题是什么时候用什么?在决定时是否应该使用任何逻辑,或者这是一个偏好问题?

1 个答案:

答案 0 :(得分:4)

目前TypeScript中的类只能实现interfaces而不是任意类型。所以一般来说,如果你希望其他类能够使用你的类型作为实现的东西,你应该使用接口。同样,接口只能extend个其他接口。

在接口的负面,他们不能表达交集或联合类型,所以如果你想在一个单一的类型中,你就会遇到类型别名。