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

时间:2017-03-23 05:35:06

标签: javascript flowtype

我无法在流程中获得准确的类型来处理对象传播。

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};,那么对象传播有效,但理想情况下我想使用精确类型。

1 个答案:

答案 0 :(得分:6)

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