我编写了以下打字代码,希望获得函数fn的推断返回值:
declare const fn: <T>(arg: T) => T extends string ? number : boolean;
type a1 = typeof fn("abc");
但typeof不能直接应用于函数调用.
我发现了一个类似的问题,但我看了相关答案,没有回答我的疑问.请让我解释一下我打算清除它.
我了解返回值可以通过以下方式获得
type a2 = ReturnType<typeof fn>
但这会丢失类型推断,并且我希望能够通过直接调用函数来推断真正的类型,因此我可以通过以下方式完成此操作:
const ret = fn("abc");
type a3 = typeof ret;
这种方法满足了我的核心需求,但‘ret’似乎是多余的,我理想的写作方式是我发布的第一个代码片段,但TypeScrip似乎不支持它,这让我觉得奇怪.Typeof可用于提取值的类型.将方法调用放在其右侧以检索函数返回值的类型应该是有意义的.
有些朋友不理解为什么我拒绝将泛型参数直接传递给泛型函数.我试着表达我的 idea :当我编写文字脚本时,我希望用户使用所有的泛型函数作为普通函数,而不传递泛型参数.函数将根据用户传入的实际参数推断所有类型,而我放置的泛型参数仅用于推断相关类型,而不是让用户传入.因为我认为显式传递泛型参数的用户看起来非常不智能,泛型旨在帮助类型推断,而不是用户应该直接传递的东西.
我重新组织了我的问题,我想我最大的问题是为什么type a1 = typeof fn("ABC");
不起作用,它看起来非常直观,我希望有其他简洁的方式来写,但看起来没有.‘"