gpt4 book ai didi

typescript - 从类型中提取调用签名

转载 作者:行者123 更新时间:2023-12-05 05:11:30 25 4
gpt4 key购买 nike

给定一个包含调用签名和其他属性的类型,例如:

export interface Foo<T> {
(arg: T): T;
doFoo(): void;
}

我们如何键入一个实现这种类型的调用签名的函数?

// Property 'doFoo' is missing in type '(arg: string) => string'
// but required in type 'Foo<string>'.
const foo: Foo<string> = (arg: string) => arg;

排除调用签名的一种方法是使用映射类型,因为调用签名不会在 keyof Foo<T> 中。 :

type FooProperties<T> = { [K in keyof Foo<T>]: Foo<T>[K] };

const foo: FooProperties<string> = {
doFoo() {}
};

但是我们怎样才能得到相反的东西,即只有调用签名,这样我们就可以写下面的内容了?

type FooSignature<T> = /* …? */

const foo: FooSignature<string> = (arg: string) => arg;

最佳答案

您可以使用ReturnTypeParameters 内置类型来提取参数和返回类型并重建签名:

export interface Foo<T> {
(arg: T): T;
doFoo(): void;
}

type JustSignature<T extends (...a: any[]) => unknown> = (...a: Parameters<T>) => ReturnType<T>

type FooSignature<T> = JustSignature<Foo<T>>

const foo: FooSignature<string> = (arg: string) => arg;

注意:对于适用于多个重载的解决方案,请参阅 here

关于typescript - 从类型中提取调用签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55376089/

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