Skip to content

Latest commit

 

History

History
366 lines (359 loc) · 8.44 KB

destructure.md

File metadata and controls

366 lines (359 loc) · 8.44 KB
let [a] = [1, 2]
a //: number

let {c, d} = {c: "hello", d: true}
c //: string
d //: bool

function foo([e], {f=1}, {g}, ...h) {
  e //: bool
  f //: number
  g //: string
  h //: [number]
}
// Check for argument leakage
e //: ?
g //: ?

foo([false], blah(), {g: "hello"}, 20)

let i, j
;({i, j, k: [l, ...m]} = {i: 1, j: false, k: ["a", "b"]})

i //: number
j //: bool
l //: string
m //: [string]

var out = {}
;[out.prop, out.prop2] = [55, true]
out //:: {prop2: bool, prop: number}

var [n, o] = ["a", false]
n //: string
o //: bool
[
  {
    "id": "ed9db680-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "a",
    "addr": "/a/",
    "kind": "v",
    "type": "number",
    "lineno": 1,
    "origin": {
      "!span": "5[0:5]-6[0:6]",
      "!type": "number",
      "!data": {
        "isConstructor": false,
        "type": "Number.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  },
  {
    "id": "ed9ddd91-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "d",
    "addr": "/d/",
    "kind": "v",
    "type": "boolean",
    "lineno": 4,
    "origin": {
      "!span": "39[3:8]-40[3:9]",
      "!type": "bool",
      "!data": {
        "isConstructor": false,
        "type": "Boolean.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  },
  {
    "id": "ed9ddd90-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "c",
    "addr": "/c/",
    "kind": "v",
    "type": "string",
    "lineno": 4,
    "origin": {
      "!span": "36[3:5]-37[3:6]",
      "!type": "string",
      "!data": {
        "isConstructor": false,
        "type": "String.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  },
  {
    "id": "ed9ddd92-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "foo",
    "addr": "/foo/",
    "kind": "f",
    "type": "void function(Array[bool], ?, foo.!2, number)",
    "lineno": 8,
    "origin": {
      "!span": "100[7:9]-103[7:12]",
      "!type": "fn([e]: [bool], {f}: ?, {g}: foo.!2, ...h: number)",
      "!data": {
        "isConstructor": false,
        "type": "Function.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  },
  {
    "id": "ed9e04a0-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "e",
    "addr": "/e/",
    "kind": "v",
    "type": "boolean",
    "lineno": 8,
    "namespace": "foo",
    "parent": "ed9ddd92-7aee-11e6-8b4c-9f7b92d723ff",
    "origin": {
      "!span": "105[7:14]-106[7:15]",
      "!type": "bool",
      "!data": {
        "isConstructor": false,
        "scoped": false,
        "isArg": false,
        "type": "Boolean.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  },
  {
    "id": "ed9e04a1-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "f",
    "addr": "/f/",
    "kind": "v",
    "type": "number",
    "lineno": 8,
    "namespace": "foo",
    "parent": "ed9ddd92-7aee-11e6-8b4c-9f7b92d723ff",
    "origin": {
      "!span": "110[7:19]-111[7:20]",
      "!type": "number",
      "!data": {
        "isConstructor": false,
        "scoped": false,
        "isArg": false,
        "type": "Number.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  },
  {
    "id": "ed9e04a2-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "g",
    "addr": "/g/",
    "kind": "v",
    "type": "string",
    "lineno": 8,
    "namespace": "foo",
    "parent": "ed9ddd92-7aee-11e6-8b4c-9f7b92d723ff",
    "origin": {
      "!span": "117[7:26]-118[7:27]",
      "!type": "string",
      "!data": {
        "isConstructor": false,
        "scoped": false,
        "isArg": false,
        "type": "String.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  },
  {
    "id": "ed9e04a3-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "h",
    "addr": "/h/",
    "kind": "v",
    "type": "[number]",
    "lineno": 8,
    "namespace": "foo",
    "parent": "ed9ddd92-7aee-11e6-8b4c-9f7b92d723ff",
    "origin": {
      "!span": "124[7:33]-125[7:34]",
      "!type": "[number]",
      "!data": {
        "isConstructor": false,
        "scoped": false,
        "isArg": false,
        "type": "Array.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  },
  {
    "id": "ed9e04a4-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "i",
    "addr": "/i/",
    "kind": "v",
    "type": "number",
    "lineno": 20,
    "origin": {
      "!span": "282[19:4]-283[19:5]",
      "!type": "number",
      "!data": {
        "isConstructor": false,
        "type": "Number.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  },
  {
    "id": "ed9e04a5-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "j",
    "addr": "/j/",
    "kind": "v",
    "type": "boolean",
    "lineno": 20,
    "origin": {
      "!span": "285[19:7]-286[19:8]",
      "!type": "bool",
      "!data": {
        "isConstructor": false,
        "type": "Boolean.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  },
  {
    "id": "ed9e04ab-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "l",
    "addr": "/l/",
    "kind": "v",
    "type": "string",
    "lineno": 21,
    "origin": {
      "!span": "300[20:13]-301[20:14]",
      "!type": "string",
      "!data": {
        "isConstructor": false,
        "type": "String.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  },
  {
    "id": "ed9e04ac-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "m",
    "addr": "/m/",
    "kind": "v",
    "type": "[string]",
    "lineno": 21,
    "origin": {
      "!span": "306[20:19]-307[20:20]",
      "!type": "[string]",
      "!data": {
        "isConstructor": false,
        "type": "Array.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  },
  {
    "id": "ed9e04a6-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "out",
    "addr": "/out/",
    "kind": "v",
    "lineno": 28,
    "origin": {
      "!span": "403[27:4]-406[27:7]",
      "!data": {
        "isConstructor": false,
        "type": "Object.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  },
  {
    "id": "ed9e04a7-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "prop",
    "addr": "/prop/",
    "kind": "v",
    "type": "number",
    "lineno": 29,
    "namespace": "out",
    "parent": "ed9e04a6-7aee-11e6-8b4c-9f7b92d723ff",
    "origin": {
      "!span": "418[28:6]-422[28:10]",
      "!type": "number",
      "!data": {
        "isConstructor": false,
        "type": "Number.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  },
  {
    "id": "ed9e04a8-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "prop2",
    "addr": "/prop2/",
    "kind": "v",
    "type": "boolean",
    "lineno": 29,
    "namespace": "out",
    "parent": "ed9e04a6-7aee-11e6-8b4c-9f7b92d723ff",
    "origin": {
      "!span": "428[28:16]-433[28:21]",
      "!type": "bool",
      "!data": {
        "isConstructor": false,
        "type": "Boolean.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  },
  {
    "id": "ed9e04a9-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "n",
    "addr": "/n/",
    "kind": "v",
    "type": "string",
    "lineno": 32,
    "origin": {
      "!span": "491[31:5]-492[31:6]",
      "!type": "string",
      "!data": {
        "isConstructor": false,
        "type": "String.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  },
  {
    "id": "ed9e04aa-7aee-11e6-8b4c-9f7b92d723ff",
    "name": "o",
    "addr": "/o/",
    "kind": "v",
    "type": "boolean",
    "lineno": 32,
    "origin": {
      "!span": "494[31:8]-495[31:9]",
      "!type": "bool",
      "!data": {
        "isConstructor": false,
        "type": "Boolean.prototype"
      }
    },
    "tagfile": "__DIR__/destructure.js"
  }
]
a	__DIR__/destructure.js	/a/;"	v	lineno:1	type:number
d	__DIR__/destructure.js	/d/;"	v	lineno:4	type:boolean
c	__DIR__/destructure.js	/c/;"	v	lineno:4	type:string
foo	__DIR__/destructure.js	/foo/;"	f	lineno:8	type:void function(Array[bool], ?, foo.!2, number)
e	__DIR__/destructure.js	/e/;"	v	lineno:8	namespace:foo	type:boolean
f	__DIR__/destructure.js	/f/;"	v	lineno:8	namespace:foo	type:number
g	__DIR__/destructure.js	/g/;"	v	lineno:8	namespace:foo	type:string
h	__DIR__/destructure.js	/h/;"	v	lineno:8	namespace:foo	type:[number]
i	__DIR__/destructure.js	/i/;"	v	lineno:20	type:number
j	__DIR__/destructure.js	/j/;"	v	lineno:20	type:boolean
l	__DIR__/destructure.js	/l/;"	v	lineno:21	type:string
m	__DIR__/destructure.js	/m/;"	v	lineno:21	type:[string]
out	__DIR__/destructure.js	/out/;"	v	lineno:28
prop	__DIR__/destructure.js	/prop/;"	v	lineno:29	namespace:out	type:number
prop2	__DIR__/destructure.js	/prop2/;"	v	lineno:29	namespace:out	type:boolean
n	__DIR__/destructure.js	/n/;"	v	lineno:32	type:string
o	__DIR__/destructure.js	/o/;"	v	lineno:32	type:boolean