Javascript 流:无法将uu分配给u,因为中缺少属性_
我在可以访问的try Flow编辑器中再现了我的情况 以下是链接发生问题时的代码: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
/* @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-我添加了一个更接近我实际情况的例子。