[英]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[];
我不清楚他们为什么不那样写,除了接口可以通过其他声明来扩充(参见this和this )。 或者可能与如何在类型别名 ( 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;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.