typescript - 判别联合上的条件类型
问题描述
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 推断出不同的类型?
解决方案
推荐阅读
- rust - 如何使用 proc 宏来创建可能违反卫生的宏?
- javascript - Jquery选项卡在淡入淡出动画之前发生变化
- javascript - Angular:使用firebase DB的传单更新标记位置
- javascript - 访问 DOM 加载后附加的元素
- javascript - 在提供文件之前如何等待 Python shell 执行
- python - 在多个类中自动更新变量
- visual-studio-code - 如何设置 VS Code Live Server 扩展以在 Linux 上使用 Firefox Developer?
- javascript - React:为什么我在 React 组件中的链接不像在纯 HTML 页面中那样工作?
- python - 如何从零开始按升序获取bar y轴
- python - 如何在 python 中水合推文 ID 的数据框