Javascript 使用流定义对象文字
我正在尝试定义此对象:Javascript 使用流定义对象文字,javascript,flowtype,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},
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},但没有成功。我是流动新手,任何帮助都将不胜感激。首先,关于流动的几句话: flowtype是一种类型检查器。这意味着它会检查您是否以声明变量的方式使用这些变量。这有两个好处: 1) 您可以在编写代码时发现错误,而在执行代码时不会发生错误,这使代码更加防弹 2) 它使代码更具可读性,因此其他人更容易理解代码,您可以在团队中工作 唯一的缺点是你需要输入更多。然而,flow推断了很多类型,这意味着即使您不告诉它,它也会检查这些类型。所以
let obj = {barcode : this_barcode.barcode, id : this.props};
实际上推断出类型:
{barcode: number, id: number}
这意味着以下各项不起作用:
obj.barcode = "fails"
当flow推断出一个数字时,我尝试分配一个字符串。
当您要将其传递给函数并执行以下操作时:
function open(barcode : {}){
console.log(barcode.id);
}
这很危险,因为你能做到
open({});
而且它也不会告诉你代码不能正常工作。因此,将id定义为属性是有意义的:
function open(barcode : { id : number }){
如果对象有许多广泛使用的属性,那么最好定义一次:
执行
let obj={“barcode”:this_barcode.barcode,“id”:this.props}
完全正确为什么没有办法定义此类型和/或为什么它不必要?现在,我将apiformated
传递到一个参数中,流请求一个类型。我已经这样做了:apiformated:{}
并且它可以工作。让apiformated:{“barcode”:number,“id”:number}={“barcode”:1,“id”:1}
完全有效。检查this\u条形码
和this.props.currentJob的类型
interface Barcode {
barcode : number;
id : number
}
let obj : Barcode = {barcode:1, id:2};