相关疑难解决方法(0)

TypeScript:是否可以获取泛型函数的返回类型?

我从某个模块中导出了一个函数,如下所示:

export function MyFunc<A>() {
    return {
        foo: (in: A) => void
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,在其他一些模块中,我希望能够讨论MyFunc. 由于我没有导出类型,我将使用typeof给定值来获取我想要的类型MyFunc理想情况下,我会执行以下操作

import { MyFunc } from "mymodule";
type MyFuncReturned<A> = ReturnType<typeof MyFunc<A>>;

function foo(): MyFuncReturned<string> {
   // ...
}
Run Code Online (Sandbox Code Playgroud)

哼,这不行;typeof只能传递一个值并且不喜欢我尝试指定该值的泛型类型。

我能做的最好的事情就是说服 TypeScriptMyFunc从我创建的值中推断出特定类型,然后为它们提供单独的类型别名,例如:

const myFuncStringReturn = MyFunc<string>();
type MyFuncStringReturn = typeof myFuncStringReturn;
Run Code Online (Sandbox Code Playgroud)

为了避免实际运行MyFunc只是为了获取类型信息,我可以将它隐藏在一个函数后面并ReturnType在它上面使用:

const myFuncStringReturn = () => MyFunc<string>();
type MyFuncStringReturn = ReturnType<typeof myFuncStringReturn>;

const myFuncBoolReturn = () => MyFunc<bool>(); …
Run Code Online (Sandbox Code Playgroud)

generics typeof typescript

15
推荐指数
2
解决办法
6434
查看次数

标签 统计

generics ×1

typeof ×1

typescript ×1