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

时间:2019-12-15 07:24:05

标签: javascript flowtype

我已经在尝试流程编辑器(可以通过here访问)中重现了自己的情况。

以下是代码,以防链接出现问题:

/* @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!" 1中缺少属性transaction.message,因此无法将message分配给Transaction

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

编辑:这是一个更现实的示例,link

1 个答案:

答案 0 :(得分:1)

我认为这里的问题不是出现错误,而是出现错误为时已晚,如果删除type语句中的if的转换错误会更早出现,我相信的是更预期的结果。

/* @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 === 4) {
    transaction.message = "Hello";
  }
}

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

Flow Try for change