我在Javascript中做了一些基本的解构:
//@flow
"use strict";
(function(){
const {a,c} = check(true);
})();
function check(bool:boolean):{|a:string,c:string|}|{||}{
if(bool){
return {
a:"b",
c:"d"
};
}
else{
return Object.freeze({});
}
}
但Flow给了我错误。
5: const {a,c} = check(true);
^ property `a`. Property not found in
9: function check(bool:boolean):{|a:string,c:string|}|{||}{
^ object type
5: const {a,c} = check(true);
^ property `c`. Property not found in
9: function check(bool:boolean):{|a:string,c:string|}|{||}{
^ object type
Flow寻找什么,我该如何解决?
答案 0 :(得分:2)
check()的签名不是{a:string,c:string} 我编辑了你的代码以尊重这种类型并且它有效。
//@flow
"use strict";
(function(){
const {a,c} = check(true);
})();
function check(bool:boolean):{|a:string,c:string|}{
if(bool){
return {
a:"b",
c:"d"
};
} else{
return Object.freeze({a: "", c: ""});
}
}
您没有告诉您的具体用例,如果此解决方案不适合您,请随时发表评论。
答案 1 :(得分:0)
问题是,截至目前,您的函数返回类型可以是空对象,也可以是{a: string, b: string}
形式
function check(bool:boolean):{|a:string,c:string|}|{||}{
实际上是“ |”代表OR,因此在您的情况下,您的函数返回类型为{|a: string, C: string|}
或{|}
请参阅:https://flow.org/en/docs/types/unions/
然后在此函数中对其进行分解
const {a,c} = check(true);
它正在尝试访问空对象中的属性a
和c
,因此流程显示此警告,因为check函数也可以返回空对象。
为变量a和c提供一些初始默认值,以便如果它们仍然不存在,则可以对其进行初始化
(function(){
const {a='',c=''} = check(true);
})();