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

标签 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}; 那么对象展开就可以了,但理想情况下我想使用一个确切的类型。

最佳答案

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

关于javascript - 具有精确流类型的对象传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42968014/

相关文章:

javascript - 为什么Flow在访问数组元素时会忽略undefined的可能性?

javascript - yarn 运行 babel src/-- -d lib/babel -- src/-d lib/-d 不存在。库/不存在

javascript - 无法在 flow-js 中将类型设置为 Array<string>

javascript - 查询中中继突变生成的协变流类型与非协变流类型

javascript - lodash find() 的流式注解

javascript - 为单元测试服务 worker 设置 JSDOM navigator.serviceWorker

javascript - 如何在 javascript 中调用函数作为参数

javascript - 不引人注目的 Javascript : Removing links if Javascript is enabled

javascript - 如何在 JSOM 中使用 ClientPeoplePicker

javascript - 将值从一个页面传递到另一个