【发布时间】:2020-06-04 04:28:21
【问题描述】:
如果省略,为什么调用中的泛型类型参数会被推断为unknown 类型(或约束类型)。康德,
function doStuff<T>(): T {
return {} as any as T;
}
const result = doStuff();
我希望doStuff 的调用是一个错误,因为缺少类型参数。相反,它推断unknown,所以result 的类型是unknown。为什么?如果 T 有约束,那么result 的类型就是约束类型。
我可以理解默认值很有用,但 TypeScript 有一个用于泛型参数的默认机制。这是历史性的挂断还是什么想法?
我使用的是 TypeScript 3.9。
这是与this 类似的问题,但我问的是为什么(不是假设它不正确),这个例子更简单。
【问题讨论】:
-
我不知道如何回答这个问题;这当然是预期的行为,记录在(越来越过时的)TypeScript 规范中。 Here 它说“如果候选参数类型的集合为空,则
T的推断类型参数是T的约束。”我不确定是否有一个规范的答案来解释为什么会这样,所以我不确定如何用除了意见之外的其他东西来回答这个问题。
标签: typescript generics