/**
 * @flow
 */

requireLazy(['A', 'B'], function(A, B) {
  var num1: number = A.numberValueA;
  var str1: string = A.stringValueA;
  var num2: number = A.stringValueA; // Error: string ~> number
  var str2: string = A.numberValueA; // Error: number ~> string

  var num3: number = B.numberValueB;
  var str3: string = B.stringValueB;
  var num4: number = B.stringValueB; // Error: string ~> number
  var str4: string = B.numberValueB; // Error: number ~> string
});

var notA: Object = A;
var notB: Object = B;

requireLazy(); // Error: No args
requireLazy([nope], function() {}); // Error: Non-stringliteral args
requireLazy(['A']); // Error: No calback expression
