我已经在尝试流程编辑器(可以通过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。
答案 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)