code: function getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr) {
              ts.Debug.assert(expr.kind === 171 /* ObjectLiteralExpression */ || expr.kind === 170 /* ArrayLiteralExpression */);
              // If this is from "for of"
              //     for ( { a } of elems) {
              //     }
              if (expr.parent.kind === 208 /* ForOfStatement */) {
                  var iteratedType = checkRightHandSideOfForOf(expr.parent.expression);
                  return checkDestructuringAssignment(expr, iteratedType || unknownType);
              }
              // If this is from "for" initializer
              //     for ({a } = elems[0];.....) { }
              if (expr.parent.kind === 187 /* BinaryExpression */) {
                  var iteratedType = checkExpression(expr.parent.right);
                  return checkDestructuringAssignment(expr, iteratedType || unknownType);
              }
              // If this is from nested object binding pattern
              //     for ({ skills: { primary, secondary } } = multiRobot, i = 0; i < 1; i++) {
              if (expr.parent.kind === 253 /* PropertyAssignment */) {
                  var typeOfParentObjectLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent.parent);
                  return checkObjectLiteralDestructuringPropertyAssignment(typeOfParentObjectLiteral || unknownType, expr.parent);
              }
              // Array literal assignment - array destructuring pattern
              ts.Debug.assert(expr.parent.kind === 170 /* ArrayLiteralExpression */);
              //    [{ property1: p1, property2 }] = elems;
              var typeOfArrayLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent);
              var elementType = checkIteratedTypeOrElementType(typeOfArrayLiteral || unknownType, expr.parent, /*allowStringInput*/ false) || unknownType;
              return checkArrayLiteralDestructuringElementAssignment(expr.parent, typeOfArrayLiteral, ts.indexOf(expr.parent.elements, expr), elementType || unknownType);
          }
docs: Gets the type of object literal or array literal of destructuring assignment. { a } from for ( { a } of elems) { } [ a ] from [a] = [ some array ...]