首页 > 解决方案 > 判别联合上的条件类型

问题描述

type A = { type: "x", x: number } | { type: "y", y: number };

1.

type B<T, K> = T extends {type:K} ? T : never;

declare function f<K>(k: K, p: B<A, K>);


f("x", { type:"y", y: 3 }); //no error


2.
type B<T, K> = T extends {type:K} ? Identity<T> : never;

type Identity<T> = { [K in keyof T]: T[K] };

f("x", { type:"y", y: 3 }); //error

两种情况有什么区别,为什么打字稿在这两种情况下为 f 中的 K 推断出不同的类型?

标签: typescript

解决方案


推荐阅读