1// https://github.com/Microsoft/TypeScript/issues/19632 2declare function direct<A extends string>(a: A | A[]): Record<A, string> 3declare function nested<A extends string>(a: { fields: A }): Record<A, string> 4declare function nestedUnion<A extends string>(a: { fields: A | A[] }): Record<A, string> 5 6const directUnionSingle = direct("z") 7const directUnionArray = direct(["z", "y"]) 8const nestedSingle = nested({fields: "z"}) 9const nestedUnionSingle = nestedUnion({fields: "z"}) 10const nestedUnionArray = nestedUnion({fields: ["z", "y"]}) 11 12declare function hasZField(arg: { z: string }): void 13 14hasZField(directUnionSingle) // ok 15hasZField(directUnionArray) // ok 16hasZField(nestedSingle) // ok 17hasZField(nestedUnionSingle) // ok 18hasZField(nestedUnionArray) // ok 19