【发布时间】:2020-05-28 22:35:54
【问题描述】:
type Test = 'a' | 'b' | 'c';
function foo<T extends Test>(arg: T) {
if (arg === 'a') {
console.log(arg);
}
}
像这样.. 我希望 arg 在 if 块中推断为“a”。
但 ts 推断为只是 T。
为什么会出现这种情况?
我觉得extends这个关键字有点意思……
【问题讨论】:
-
有趣。如果你写
arg: string,那么它确实会正确缩小,所以它肯定与 T 是一个类型变量有关。但是如果你没有extends子句那么它认为T和string没有重叠,所以没有办法测试它是否是由extends引起的。这似乎是一个错误,但也许是有原因的。 -
虽然问题本身可能很有趣,但上面示例中的泛型是无用的。只需使用
function foo(arg: Test) ... -
@AlekseyL。您可以假设这只是一个 minimal reproducible example 来演示问题,而不是实际用例。
标签: typescript typescript-typings