网站搜索

在 TypeScript 中,() => any 和 {(): any} 有什么区别


现在这段代码没有错误,TypeScript 编译器认为它是完全有效的,但它们是相同的吗?有人能解释这两种类型定义之间的区别,并给出它们各自的好用例吗?

const b = () =>'hello'

const x: ()=>string = b
const y: {():string} = b

答案#1

它们是一样的。

第二种形式确实为您提供了在需要时添加额外静态属性的选项。

type FunctionWithId = {
    (): string;
    id: number;
}

const b = () => 'hello'
b.id = 4;
const x: FunctionWithId = b

也可以使用第二种版本来进行函数重载:

type Example = {
  (x: number): number;
  (x: string): string;
}

所以如果你需要其中一些额外功能,请使用第二种语法。如果不需要,任意一种都可以,你可能会更常看到第一种,因为它更简单。