• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1//// [nestedTypeVariableInfersLiteral.ts]
2// https://github.com/Microsoft/TypeScript/issues/19632
3declare function direct<A extends string>(a: A | A[]): Record<A, string>
4declare function nested<A extends string>(a: { fields: A }): Record<A, string>
5declare function nestedUnion<A extends string>(a: { fields: A | A[] }): Record<A, string>
6
7const directUnionSingle = direct("z")
8const directUnionArray = direct(["z", "y"])
9const nestedSingle = nested({fields: "z"})
10const nestedUnionSingle = nestedUnion({fields: "z"})
11const nestedUnionArray = nestedUnion({fields: ["z", "y"]})
12
13declare function hasZField(arg: { z: string }): void
14
15hasZField(directUnionSingle) // ok
16hasZField(directUnionArray) // ok
17hasZField(nestedSingle) // ok
18hasZField(nestedUnionSingle) // ok
19hasZField(nestedUnionArray) // ok
20
21
22//// [nestedTypeVariableInfersLiteral.js]
23var directUnionSingle = direct("z");
24var directUnionArray = direct(["z", "y"]);
25var nestedSingle = nested({ fields: "z" });
26var nestedUnionSingle = nestedUnion({ fields: "z" });
27var nestedUnionArray = nestedUnion({ fields: ["z", "y"] });
28hasZField(directUnionSingle); // ok
29hasZField(directUnionArray); // ok
30hasZField(nestedSingle); // ok
31hasZField(nestedUnionSingle); // ok
32hasZField(nestedUnionArray); // ok
33