我从某个模块中导出了一个函数,如下所示:
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)