使用Flow定义对象文字

时间:2017-11-20 15:54:39

标签: javascript flowtype

我正在尝试定义此对象:

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的新手,我们将不胜感激。

1 个答案:

答案 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};
相关问题