Ale*_*xHv 1 conditional-operator typescript
为什么我的SupposedId下面的类型不是类型标识?
Typescript 正在抱怨Type 'T' is not assignable to type 'SupposedId<T>'.
为什么T不能分配给 或T,T我错过了什么?
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>'
}
Run Code Online (Sandbox Code Playgroud)
这是因为分布式条件类型。ShouldedId 分发到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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
453 次 |
| 最近记录: |