繁体   English   中英

Type Script 接口可以扩展 Function

[英]Can Type Script interface extend the Function

学习Angular遇到了如下声明:

interface IMessagesOperation extends Function {
(messages: Message[]): Message[];
}

这到底是什么意思(为什么Function有大写字母“F”,而不仅仅是function )。 在这种情况下,我如何实施具体的 class。 我以前从未见过 - 我来自 Java 世界。

可能有一些我没有听说过的特定惯用原因,但基本上就是说: IMessagesOperation是一个 function,它具有所有常见的Function内容,并接受Message数组并返回Message数组,如下所示:

type IMessagesOperation = (messages: Message[]) => Message[];

我不清楚他们为什么不那样写,除了接口可以通过其他声明来扩充(参见thisthis )。 或者可能与如何在类型别名 ( type ) 中解决冲突有关&interface with extends

为了让您了解我所说的“由其他声明增强”的意思,可以在代码的其他地方使用接口来实现:

interface IMessagesOperation {
    (messages: string): Message[];
    //         ^^^^^^−−−−−− note the change
}

它与您问题中的接口合并,产生一个 function 重载类型,其中这两个调用均有效:

const op: IMessagesOperation = /*...*/;
const messages1 = op("testing");
const messages2 = op(messages);

游乐场链接

您不能使用类型别名( type IMessagesOperation = (messages: Message[]) => Message[]; )来做到这一点。

为什么Function有大写字母“F”而不是function

它指的是 JavaScript 的Function构造函数,尽管在那种特定情况下(因为它是类型上下文,而不是值 [运行时] 上下文)它指的是Function构造函数创建的事物的类型:function。

在这种情况下,我如何实施具体的 class。

它是 function,而不是 class,因此您可以编写 function:

const m1: IMessagesOperation = function(messages: Message[]): Message[] {
    return messages;
};

Typescript 游乐场上面的例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM