gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:33:26 26 4
gpt4 key购买 nike

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

type Foo = {
bar(a: string): number
}

// or

type Foo = {
bar: (a:string) => number
}

但是,使用第一种方法,也可以定义一个没有这样名称的函数:

type Foo = {
(a: string): number
}

TypeScript 编译器不会在这里提示,但我不知道您将如何创建与此类型签名匹配的对象?尝试这样的事情不会编译:

let f: Foo = {
(a: string) => 2
}

那么问题来了:上面的类型定义到底是什么意思?是否可以创建与此签名匹配的对象?

最佳答案

另一种写法:

type Foo = (a: string) => number;

...但是您还可以包含该函数可能具有的其他属性,例如:

type Foo = {
(a: string): number;
b: boolean;
};

...为函数定义一个类型,该函数接受一个字符串,返回一个数字,并且具有 bool 值的 b 属性(在函数上)。

Fun on the playground :

// 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

关于typescript - typescript 类型的匿名函数签名。这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60169126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com