我正在尝试定义此对象:
let apiFormatted: {"barcode": number, "id": number} = {"barcode": this_barcode.barcode, "id": this.props.currentJob}
我从Flow获得的错误是:
Flow: object literal. This type is incompatible with object type
我尝试{[string]:number,[string]:number}也没有成功。我是Flow的新手,我们将不胜感激。
答案 0 :(得分:1)
首先谈谈流程:
flowtype是一个类型检查器。这意味着它会检查您是否按照声明方式使用变量。这有两个好处:
1)您可以在编写代码时发现错误,并且在执行代码时不会发生错误,这会使您的代码更具防弹性
2)它使代码更具可读性,因此其他人更容易理解代码,您可以在团队中工作。
唯一的缺点是你需要输入更多。然而,流推断大部分类型,这意味着它会检查类型,即使您没有告诉它。因此
let obj = {barcode : this_barcode.barcode, id : this.props};
实际上推断出类型:
{barcode: number, id: number}
这意味着以下内容无法发挥作用:
obj.barcode = "fails"
因为流量推断数字,但我试图分配一个字符串。 如果要将其传递给函数并执行:
function open(barcode : {}){
console.log(barcode.id);
}
这很危险。因为你可以做到
open({});
它不会告诉你代码不会按照需要运行。因此,将 id 定义为aproperty是有意义的:
function open(barcode : { id : number }){
如果你的对象有很多被广泛使用的属性,那么定义一次Interface可能是个好主意:
interface Barcode {
barcode : number;
id : number
}
let obj : Barcode = {barcode:1, id:2};