繁体   English   中英

Typescript 三元运算符破坏标识类型

[英]Typescript ternary operator breaks identity type

为什么我下面的SupposedId类型不是类型标识?

Typescript 抱怨Type 'T' is not assignable to type 'SupposedId<T>'

为什么T不能分配给TT ,我错过了什么?

type SupposedId<T> = T extends object ? T : T;

function makeId<T>(test: T): SupposedId<T> {
  return test // <- Type 'T' is not assignable to type 'SupposedId<T>'
}

游乐场示例

这是因为分布式条件类型 SuppedId 分发给T extends any | T extends object T extends any | T extends object 您的案例当然是一个新案例,因为它们实际上都解析为T ,但是条件类型根据T extends object执行不同的缩小。

但是,根据文档,您可以通过在 extends 关键字的每一侧添加方括号来修复它:

type SupposedId<T> = [T] extends [object] ? T : T;

function makeId<T>(test: T): SupposedId<T> {
  /* `test` is now one of `T extends object` or `T extends any`,
     not `T extends object | T extends any` */
  return test;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM