typescript - 为什么 Typescript 不会错误泛型联合类型?
问题描述
interface Foo<T extends 'fo' | 'foo'> {
bla: T extends 'whyNoError?' ? string : number;
}
预期行为:见类似:
'whyNoError' 值永远不会发生
实际:没有错误。
既然我指定 T 扩展 'fo' 或 'foo',为什么 Typescript 不将 'whyNoError' 值识别为从不或始终为假?
解决方案
因为条件类型不能那样工作,我猜?在该条件类型上出现“无法访问的代码”错误是一个有趣的建议string
,但我无法想象有人会非常关心实现它。
从技术上和学究上讲,我可以指出这T
可能是一个交集 'fo' & 'whyNoError?'
,尽管它是一种最终归约为 的荒谬类型,never
但确实会导致编译器走上一条您可能会感到惊讶的道路:
interface Foo<T extends 'fo' | 'foo'> {
bla: T extends 'whyNoError?' ? string : number;
}
declare const foo: Foo<'fo' & 'whyNoError?'>;
const str = foo.bla; // string !!
这不是一个非常令人满意的答案,因为可能没有人愿意支持这种愚蠢的交叉点,但要点应该是,在不担心这种极端情况的情况下实现你所要求的并不是一件容易的事。
希望有帮助;祝你好运!
推荐阅读
- wpf - WPF:弹出窗口内边框内的网格?
- python - 用 numpy ndarray 索引 numpy ndarray
- java - 在 Maven 构建中找不到资源
- java - Maven 找不到缓存的工件
被缓存在本地存储库中 - c# - 获取 Blazor 组件中的当前 URL
- php - Akeneo 2.1.8:从控制台任务发送电子邮件不遵循配置
- python-3.x - Tflearns .fit() 方法与 numpy.ndarrays 导致 TypeError
- python-3.x - 用 numpy 查找函数
- java - JPA Hibernate 将类中的类中的字段映射到同一个表
- android - 任务 ':app:compileDebugJavaWithJavac' 执行失败。安卓工作室