泛型函数的条件类型:类型不可分配

时间:2020-03-27 18:14:36

标签: typescript generics typescript-generics

我试图限制泛型函数的返回类型。 (为简单起见,示例简化了,请忽略该函数的实际“有用性”。)

after_request

但是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>'. 只能解析为数字或函数。 100如何不能分配?我在这里弄错了吗?编译器试图告诉我什么?

我觉得答案可能是在docs for conditional types中,但我找不到它(说实话,这里的某些文档有些让人不知所措)。有人可以向我解释一下此片段中发生了什么吗?


(TS 3.8.3)

1 个答案:

答案 0 :(得分:1)

类似于将类型范围缩小为联合类型的编译器限制:

Type 'true' is not assignable to type 'T2 extends keyof T1 ? true : false' #22735