在 TypeScript 接口上声明函数的多种方法:它们有何不同?

mar*_*oop 5 typescript

我见过所示是在多个方面宣称的功能,性能func1func2这个打字稿接口上:

interface Thing {
    func: (arg:string) => number;
    func2(arg:string): number;
}
Run Code Online (Sandbox Code Playgroud)

两者有区别吗?有没有一种情况你会使用一个而不是另一个?

这个操场链接似乎暗示这两者可以互换使用。这有什么限制吗?

bas*_*rat 6

两者有区别吗

是的。

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;
}
Run Code Online (Sandbox Code Playgroud)