typescript 使用带有外部签名的函数声明访问泛型变量

zwghvu4y  于 2023-02-10  发布在  TypeScript
关注(0)|答案(1)|浏览(118)

为了可读性,我喜欢将函数签名类型与函数声明分开声明。
因此,代替:const foo = (a: string): boolean => true;
我喜欢:

type TFooFn = (a: string) => boolean;
const foo: TFooFn = (a) => true;

这很好用,但是假设我想要一个泛型函数,它需要使用函数体中的泛型变量,那么就像这样:

const foo = <T extends Bar>(a: string): T => {
 const bar = createBar<T>();
 return bar;
}

如何使用外部函数签名类型来完成此操作?
我试过:

type TFooFn<T extends Bar> = (a: string) => T;
const foo: TFooFn<T> = (a) => {
 const bar = createBar<T>();
 return bar;
}

但那是不对的。

rhfm7lfc

rhfm7lfc1#

其语法看起来有点不同(在我看来也是不直观的)我打赌这是有原因的,但是我没有看规范,你需要像这样写类型和函数声明,因为泛型属于函数而不是函数类型(并非此函数类型的所有示例都绑定为使用相同的泛型类型-它们特定于不同的函数)。

type TFooFn = <T extends Bar>(a: string) => T;

const foo: TFooFn = <T extends Bar>(a: string) => {
    const bar = createBar<T>();
    return bar;
}

相关问题