我无法在流程中获得准确的类型来处理对象传播。
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};
,那么对象传播有效,但理想情况下我想使用精确类型。
答案 0 :(得分:6)
是的,这是一个已知的错误。我目前正致力于改进对象传播的分析,以解决这个问题和其他问题。根本原因是对象扩散表达式导致“未密封”,这与精确对象类型不兼容。改进的分析将尽可能创建密封对象。