Javascript 流:无法将uu分配给u,因为中缺少属性_

Javascript 流:无法将uu分配给u,因为中缺少属性_,javascript,flowtype,Javascript,Flowtype,我在可以访问的try Flow编辑器中再现了我的情况 以下是链接发生问题时的代码: /* @flow */ type PayloadType = 1 | 2 | 3; type Transaction = { amount: number, destination: string } function create(type: PayloadType, transaction: Transaction): void { transaction.amount = 10; tr

我在可以访问的try Flow编辑器中再现了我的情况

以下是链接发生问题时的代码:

/* @flow */

type PayloadType = 1 | 2 | 3;

type Transaction = {
  amount: number,
  destination: string
}

function create(type: PayloadType, transaction: Transaction): void {
  transaction.amount = 10;
  transaction.destination = "8ca76aff-8fe8-4715-9e9a-2ad0630d45a0"

  if ((type: PayloadType) === 4) {
    transaction.message = "Hello";
  }
}

const transaction: Transaction = {}
create(1, transaction)
错误是:

无法将
“Hello!”
分配给
事务。消息
,因为
事务
中缺少属性
消息

分配无效属性的行永远不会执行。我假设Flow应该知道这一点,因为
type
永远不可能是
4
,因此该条件永远不会为真


编辑:这里有一个更现实的例子。

我认为这里的问题不是出现错误,而是错误出现得太晚了,如果要删除
类型的强制转换,如果
语句错误会出现得更早,我相信会得到更预期的结果

/*@flow*/
类型PayloadType=1 | 2 | 3;
交易类型={
金额:数字,
目的地:字符串
}
函数创建(类型:PayloadType,事务:transaction):无效{
交易金额=10;
transaction.destination=“8ca76aff-8fe8-4715-9e9a-2ad0630d45a0”
如果(类型===4){
transaction.message=“你好”;
}
}
常量事务:事务={}
创建(1,事务)

我认为这里的问题不是出现错误,而是错误出现得太晚了,如果要删除
类型的强制转换,如果
语句错误会出现得更早,我相信会出现更预期的结果

/*@flow*/
类型PayloadType=1 | 2 | 3;
交易类型={
金额:数字,
目的地:字符串
}
函数创建(类型:PayloadType,事务:transaction):无效{
交易金额=10;
transaction.destination=“8ca76aff-8fe8-4715-9e9a-2ad0630d45a0”
如果(类型===4){
transaction.message=“你好”;
}
}
常量事务:事务={}
创建(1,事务)

是什么情况导致您编写了不应该运行的输入错误的代码?某些类型的宏扩展?流也会在
事务消息
赋值上报告错误,即使条件更改为
if(false)
。此外,如果您删除类型转换并只写
if(type==4)
,则流将正确地抱怨
number literal 4与enum
不兼容。您知道为什么它会用
if(false)
报告错误吗?当它解析文本时,会想到忽略该语句。即使没有运行的代码也应该进行类型检查。这就是它在几乎所有语言中的工作方式。那么,>是什么情况导致您编写了不应该运行的错误类型的代码?某种宏扩展?@Ry-我添加了一个更接近我实际情况的示例。是什么情况导致您编写了不应该运行的错误类型代码?某些类型的宏扩展?流也会在
事务消息
赋值上报告错误,即使条件更改为
if(false)
。此外,如果您删除类型转换并只写
if(type==4)
,则流将正确地抱怨
number literal 4与enum
不兼容。您知道为什么它会用
if(false)
报告错误吗?当它解析文本时,会想到忽略该语句。即使没有运行的代码也应该进行类型检查。这就是它在几乎所有语言中的工作方式。那么,>是什么情况导致您编写了不应该运行的错误类型的代码?某种宏观扩张?@Ry-我添加了一个更接近我实际情况的例子。