typescript类型中的匿名函数签名。这是什么意思?

typescript类型中的匿名函数签名。这是什么意思?,typescript,Typescript,我知道如何在TypeScript中定义一个类型,该类型需要这样一个命名函数: 类型Foo={ 条(a:字符串):数字 } //或 类型Foo={ 条:(a:string)=>数字 } 但是,使用第一种方法,也可以定义一个没有如下名称的函数: 类型Foo={ (a:字符串):数字 } TypeScript编译器在这里没有抱怨,但我不知道如何创建与此类型签名匹配的对象?尝试这样的操作不会编译: 设f:Foo={ (a:字符串)=>2 } 所以问题是:上面的类型定义实际上意味着什么?是否可以创建

我知道如何在TypeScript中定义一个类型,该类型需要这样一个命名函数:

类型Foo={
条(a:字符串):数字
}
//或
类型Foo={
条:(a:string)=>数字
}
但是,使用第一种方法,也可以定义一个没有如下名称的函数:

类型Foo={
(a:字符串):数字
}
TypeScript编译器在这里没有抱怨,但我不知道如何创建与此类型签名匹配的对象?尝试这样的操作不会编译:

设f:Foo={
(a:字符串)=>2
}

所以问题是:上面的类型定义实际上意味着什么?是否可以创建与此签名匹配的对象?

这是另一种写入方式:

type Foo = (a: string) => number;
…但您也可以包括函数将具有的其他属性,例如:

type Foo = {
    (a: string): number;
    b: boolean;
};
…为函数定义一种类型,该函数接受字符串,返回数字,并具有布尔属性
b

:

//您的类型
类型Foo={
(a:字符串):数字;
};
//等效类型
类型栏=(a:字符串)=>数字;
//证明它们等效(或至少兼容)
常量a:Foo=(a:string)=>42;
常数b:Bar=a;//42;

设f1:Foo2=x1;//我通常会引用文档,但是……我在文档中找不到它。:-)我是在操场上玩出来的。谢谢你的回答,但现在我有一个后续问题:在一个类型中也可能有多个匿名函数签名,比如:Type Foo={(a:string):number,(a:number):string}那么这是某种重载吗?@ManuelMauky-,耶::-)这真的很有趣。但它仅在返回类型相同时才起作用。如果返回类型不同,它将停止工作:@ManuelMauky-这很有趣。。。您可以使用普通函数重载来实现这一点。呵呵。
// Your type
type Foo = {
  (a: string): number;
};

// Equivalent type
type Bar = (a: string) => number;

// Proving they're equivalent (or at least compatible)
const a: Foo = (a: string) => 42;
const b: Bar = a; // <== Works

// Including a property on the function
type Foo2 = {
  (a: string): number;
  b: boolean;
};

// Creating one
const x1 = (a: string): number => 42;
let f1: Foo2 = x1; // <== Error because `x1` doesn't have `b`

const x2 = (a: string): number => 42;
x2.b = true;
let f2: Foo2 = x2; // <== Works