我似乎无法在流程中获得确切的类型来处理对象传播。
type Point = {| x: number, y: number |};
const p1: Point = { x: 10, y: 10 };
const p2: Point = { ...p1, y: 5 };
生成错误对象文字。不精确类型与精确类型不兼容
这不会产生错误,但会修改 p1:
const p3: Point = Object.assign(p1, {y: 5});
对空对象使用 Object.assign 也会产生相同的对象字面量错误:
const p4: Point = Object.assign({}, p1, {y: 5});
如果我使用 type Point = {x: number, y: number};
那么对象展开就可以了,但理想情况下我想使用一个确切的类型。
最佳答案
是的,这是一个已知错误。我目前正在努力改进我们对对象传播的分析,以解决这个问题和其他问题。根本原因是对象传播表达式导致“未密封”,这与确切的对象类型不兼容。改进后的分析将尽可能创建密封对象。
关于javascript - 具有精确流类型的对象传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42968014/