具有精确流类型的对象传播

And*_*ndy 5 javascript flowtype

我似乎无法获得与对象传播一起工作的精确类型.

type Point = {| x: number, y: number |};
const p1: Point = { x: 10, y: 10 };
const p2: Point = { ...p1, y: 5 };
Run Code Online (Sandbox Code Playgroud)

生成错误对象文字.不精确类型与确切类型不兼容

这不会产生错误,但会修改p1:

const p3: Point = Object.assign(p1, {y: 5});
Run Code Online (Sandbox Code Playgroud)

将Object.assign与空对象一起使用也会产生相同的对象文字错误:

const p4: Point = Object.assign({}, p1, {y: 5});
Run Code Online (Sandbox Code Playgroud)

如果我使用type Point = {x: number, y: number};然后对象传播工作,但理想情况下我想使用精确类型.

Sam*_*man 6

是的,这是一个已知的错误.我目前正致力于改进对象传播的分析,以解决这个问题和其他问题.根本原因是对象扩散表达式导致"未密封",这与精确对象类型不兼容.改进的分析将尽可能创建密封对象.