Bug报告
我已经尽力搜索相关问题并仔细阅读文档,但仍未找到任何有用的信息。如果这个bug最终被证明是重复的,甚至是根本不是一个bug,我感到很抱歉。
🔎 搜索词
条件类型未定义
🕗 版本与回归信息
在Playground中的所有版本( http://www.typescriptlang.org/play )
- 这是我在每个版本中尝试的行为,我也查看了关于泛型和类型保护的常见问题解答。
⏯ Playground链接
Playground链接
💻 代码
type Foo<T extends number | string> = {
value: T;
}
type Narrow<T extends number | string | undefined> = T extends undefined ? never : Foo<T>;
// ^
// ERROR: Type 'string | number | undefined' is not assignable to type 'string | number'.
🙁 实际行为
在上面的示例中,当将 T
传递给 Foo
时,Foo
会抛出错误,因为编译器认为 T
可能未定义。
🙂 预期行为
条件已经检查了 T
是否扩展了未定义,所以我希望在三元运算符的右侧,T
的类型会从 string | number | undefined
缩小到 string | number
。
2条答案
按热度按时间rta7y2nd1#
我觉得理论上可能有一些原因解释为什么我们不这样做,但我现在无法重构它。
332nm8kg2#
这是相关的,但我不确定它是否过时:#29188 (评论)
顺便说一下,这个方法是有效的