为了可读性,我喜欢将函数签名类型与函数声明分开声明。
因此,代替: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;
}
但那是不对的。
1条答案
按热度按时间rhfm7lfc1#
其语法看起来有点不同(在我看来也是不直观的)我打赌这是有原因的,但是我没有看规范,你需要像这样写类型和函数声明,因为泛型属于函数而不是函数类型(并非此函数类型的所有示例都绑定为使用相同的泛型类型-它们特定于不同的函数)。