typescript - 当成员之一存在时,具有可选成员的通用映射类型约束不约束
问题描述
const abc = <T extends object, P extends { [key in keyof T]?: number }>(
a: T,
b: P
) => {
console.log(a, b);
};
const A = { x: "1", y: "2", z: "3" };
const b = { x: 1, y: 2, z: 3 };
const b1 = { x: 1, y: 2 };
const b3 = { m: 5 };
const b4 = { m: 5, x: 1 };
abc(A, b);
abc(A, b1);
abc(A, b3); // Type '{ m: number; }' has no properties in common with type '{ x?: number | undefined; y?: number | undefined; z?: number | undefined; }'
abc(A, b4); // expect type error just like b3 but it is not
既然m
不存在A
,b4
应该错误喜欢b3
吗?但为什么它不是错误以及如何解决它?
这是沙盒 代码和框
解决方案
键入'{ m:数字;}' 与类型 '{ x?: number | 没有共同的属性。不明确的; y?: 数字 | 不明确的; z?: 数字 | 不明确的; }。
认为它很清楚,b4 没有错误,因为有 x?, y? 之一 z? 包括。那是因为您从 T 扩展,而 T 来自您传递的第一个参数是 A。
推荐阅读
- dotnetnuke - DotNetNuke SMTP 不工作 注册新用户
- sql-server - 我们是否应该使用 order by 子句中使用的列作为 NC INDEX 的包含列
- data-structures - 无法理解队列指数方程
- java - 检查数组是否可以是零数组
- magento - Magento 2 || 多存储与多实例 - 优点和缺点?
- python - 我想将列表中的元素从字符串格式更改为整数,我应该如何处理它?
- docker - ingress-nginx:luarocks make:不允许操作
- python - Python 请求 HTML - img src 被数据刮掉:image/gif;base64
- typescript - 如何在不预先填充字段的情况下将类型转换为对象?
- python - 在 Python 中不使用 for 循环将值从列表分配到字典