我正在使用TypeScrip中的?运算符创建一个条件类型.根据一个条件,我希望类型是两种不同的类型.在这样做的时候,我发现这种情况会影响到 twig .

MRE在这里:

type Type1<O> = O extends never ? unknown : (undefined extends O ? 1 : 2);
type a = Type1<string | undefined>

type Type2<O> = undefined extends O ? 1 : 2;
type b = Type2<string | undefined>

或者TS Playground年后.

我希望ab是相同的,因为条件O extends never永远不应该为真,除非Onever.然而,这不是type a = 1 | 2type b = 1的情况;

我想不出一个理由,为什么会出现类型并集,除非Type1中的条件以某种方式迭代到string | undefined一元数.

为何会是这样呢?如果我希望a只是1,我该如何解决这个问题?

推荐答案

你会被distribution over union人吓一跳.因为您在条件类型中使用左侧的裸体类型,所以您所写的基本上等同于所写的Type1<string> | Type1<undefined>.您所需要做的就是将操作数括在方括号中.

Typescript相关问答推荐

React-Native运行方法通过监听另一个状态来更新一个状态

如何使用axios在前端显示错误体

Angular 17 -如何使用新的@if语法在对象中使用Deliverc值

类型脚本接口索引签名

Angular 行为:属性类型从SignalFunction更改为布尔

如何在TypeScrip面向对象程序设计中用方法/属性有条件地扩展类

如何在Reaction路由v6.4加载器和操作中获得Auth0访问令牌?

缩小并集子键后重新构造类型

TypeScrip:来自先前参数的参数中的计算(computed)属性名称

使用KeyOf和Never的循环引用

为什么我的查询钩子返回的结果与浏览器的网络选项卡中看到的结果不同?

如何编写在返回函数上分配了属性的类型安全泛型闭包

如何将spread operator与typescripts实用程序类型`参数`一起使用

map 未显示控制台未显示任何错误@reaction-google-map/api

打字脚本错误:`不扩展[Type]`,而不是直接使用`[Type]`

如何在Type脚本中创建一个只接受两个对象之间具有相同值类型的键的接口?

React-跨组件共享功能的最佳实践

如何在Typescript 中定义具有相同类型的两个泛型类型的两个字段?

将函数签名合并到重载中

对象可能未定义(通用)