我试图限制泛型函数的返回类型。 (为简单起见,示例简化了,请忽略该函数的实际“有用性”。)
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)
答案 0 :(得分:1)
类似于将类型范围缩小为联合类型的编译器限制:
Type 'true' is not assignable to type 'T2 extends keyof T1 ? true : false' #22735