interface Id { id : number ; } interface Name { name : string ; } declare function createLabelA ( id ) ; declare function createLabelA ( name ) ; declare function createLabelA ( name ) ; declare function createLabelB < T extends number | string > ( idOrName ) ; let a1 = createLabelA ( "typescript" ) ; let b1 = createLabelA ( 2.8 ) ; let c1 = createLabelA ( "" as any ) ; let d1 = createLabelA ( "" as never ) ; let a2 = createLabelB ( "typescript" ) ; let b2 = createLabelB ( 2.8 ) ; let c2 = createLabelB ( "" as any ) ; let d2 = createLabelB ( "" as never ) ; export { } ; { type Flatten < T > = T extends any [ ] ? T [ 0 ] : T ; let z1 ; let z2 ; } { type Flatten < T > = T extends Array < infer U > ? U : T ; let z1 ; let z2 ; } { type T10 = TypeName < string | ( ( ) => void ) > ; type T12 = TypeName < string | string [ ] | undefined > ; type T11 = TypeName < string [ ] | number [ ] > ; }