【发布时间】:2020-07-08 12:54:49
【问题描述】:
我正在尝试限制泛型函数的返回类型。 (示例为简单起见,请忽略函数的实际“有用性”)。
type MyReturnType<T> = T extends string ? number : Function;
type Input = string | number;
function myFn<T extends string | number>(input: T): MyReturnType<T> {
return typeof input === 'string' ? 100 : (() => {});
}
但是return 语句会导致打字稿错误——
Type '100 | (() => void)' is not assignable to type 'MyReturnType<T>'.
Type '100' is not assignable to type 'MyReturnType<T>'.
——这让我很困惑。据我了解,MyReturnType<T> 只能解析为数字或函数。 100怎么不能赋值?我这里有什么问题吗?编译器想告诉我什么?
我觉得答案可能在 docs for conditional types 中,但我找不到它(老实说,这里的文档的某些部分让我有点不知所措)。有人可以向我解释一下这个 sn-p 中发生了什么吗?
(TS 3.8.3)
【问题讨论】:
-
@Lesiak 感谢您的评论!非布尔值实际上也会出现问题,我调整了问题以反映这一点。我阅读mhegazy's comment on that issue 的方式,这是编译器的设计限制,现在需要类型转换来避免它。你同意这个观点吗?你愿意回答吗(因为你挖出了这个问题)?否则,我会这样做。
标签: typescript generics typescript-generics