在 TypeScript 接口上声明函数的多种方式:它们有何不同?
Posted
技术标签:
【中文标题】在 TypeScript 接口上声明函数的多种方式:它们有何不同?【英文标题】:Multiple ways to declare a function on a TypeScript interface: how are they different? 【发布时间】:2015-07-22 15:35:17 【问题描述】:我见过以多种方式声明的函数属性,如此 TypeScript 界面上的 func1
和 func2
所示:
interface Thing
func: (arg:string) => number;
func2(arg:string): number;
这两者有区别吗?是否存在您会使用其中一个的情况?
This playground link 似乎暗示两者可以互换使用。这有什么限制吗?
【问题讨论】:
我对问题***.com/questions/30056593/…的回答很好地回答了这个问题。 【参考方案1】:这两者有区别吗
是的。
func: (arg:string) => number;
这个版本意味着它的一个属性。当您尝试声明 overloads
时,这将限制您。
func2(arg:string): number;
这对于函数来说是首选,因为这意味着您可以在事后轻松声明重载(使用接口的开放式性质)
似乎暗示两者可以互换使用
那是因为它们是类型兼容的。并不意味着它们是同一个东西。请参阅下面的属性与方法:
示例
这应该澄清:
interface Thing
func: (arg: string) => number;
func2(arg:string): number;
interface Thing
// Overload not permitted
func: (arg: number) => string; // ERROR!
// Overload okay
func2(arg: number): string;
【讨论】:
以上是关于在 TypeScript 接口上声明函数的多种方式:它们有何不同?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 TypeScript 注释中组合多种类型的成员?
在 TypeScript 中使用 import/require 来获取接口声明
使用 TypeScript 声明 (*.d.ts) 和接口的正确方法?
如果函数返回多种类型,我可以声明一个函数返回值吗? [复制]