=== tests/cases/conformance/types/objectTypeLiteral/callSignatures/specializedSignatureIsSubtypeOfNonSpecializedSignature.ts === // Specialized signatures must be a subtype of a non-specialized signature // All the below should not be errors function foo(x: 'a'); >foo : { (x: 'a'): any; (x: string): any; } >x : 'a' function foo(x: string); >foo : { (x: 'a'): any; (x: string): any; } >x : string function foo(x: any) { } >foo : { (x: 'a'): any; (x: string): any; } >x : any class C { >C : C foo(x: 'a'); >foo : { (x: 'a'): any; (x: string): any; } >x : 'a' foo(x: string); >foo : { (x: 'a'): any; (x: string): any; } >x : string foo(x: any) { } >foo : { (x: 'a'): any; (x: string): any; } >x : any } class C2 { >C2 : C2 >T : T foo(x: 'a'); >foo : { (x: 'a'): any; (x: string): any; (x: T): any; } >x : 'a' foo(x: string); >foo : { (x: 'a'): any; (x: string): any; (x: T): any; } >x : string foo(x: T); >foo : { (x: 'a'): any; (x: string): any; (x: T): any; } >x : T >T : T foo(x: any) { } >foo : { (x: 'a'): any; (x: string): any; (x: T): any; } >x : any } class C3 { >C3 : C3 >T : T >String : String foo(x: 'a'); >foo : { (x: 'a'): any; (x: string): any; (x: T): any; } >x : 'a' foo(x: string); >foo : { (x: 'a'): any; (x: string): any; (x: T): any; } >x : string foo(x: T); >foo : { (x: 'a'): any; (x: string): any; (x: T): any; } >x : T >T : T foo(x: any) { } >foo : { (x: 'a'): any; (x: string): any; (x: T): any; } >x : any } interface I { >I : I (x: 'a'); >x : 'a' (x: number); >x : number (x: string); >x : string foo(x: 'a'); >foo : { (x: 'a'): any; (x: string): any; (x: number): any; } >x : 'a' foo(x: string); >foo : { (x: 'a'): any; (x: string): any; (x: number): any; } >x : string foo(x: number); >foo : { (x: 'a'): any; (x: string): any; (x: number): any; } >x : number } interface I2 { >I2 : I2 >T : T (x: 'a'); >x : 'a' (x: T); >x : T >T : T (x: string); >x : string foo(x: 'a'); >foo : { (x: 'a'): any; (x: string): any; (x: T): any; } >x : 'a' foo(x: string); >foo : { (x: 'a'): any; (x: string): any; (x: T): any; } >x : string foo(x: T); >foo : { (x: 'a'): any; (x: string): any; (x: T): any; } >x : T >T : T } interface I3 { >I3 : I3 >T : T >String : String (x: 'a'); >x : 'a' (x: string); >x : string (x: T); >x : T >T : T foo(x: 'a'); >foo : { (x: 'a'): any; (x: string): any; (x: T): any; } >x : 'a' foo(x: string); >foo : { (x: 'a'): any; (x: string): any; (x: T): any; } >x : string foo(x: T); >foo : { (x: 'a'): any; (x: string): any; (x: T): any; } >x : T >T : T } var a: { >a : { (x: string): any; (x: 'a'): any; (x: number): any; foo(x: string): any; foo(x: 'a'): any; foo(x: number): any; } (x: string); >x : string (x: 'a'); >x : 'a' (x: number); >x : number foo(x: string); >foo : { (x: string): any; (x: 'a'): any; (x: number): any; } >x : string foo(x: 'a'); >foo : { (x: string): any; (x: 'a'): any; (x: number): any; } >x : 'a' foo(x: number); >foo : { (x: string): any; (x: 'a'): any; (x: number): any; } >x : number } var a2: { >a2 : { (x: 'a'): any; (x: string): any; (x: T): any; foo(x: string): any; foo(x: 'a'): any; foo(x: T): any; } (x: 'a'); >x : 'a' (x: string); >x : string (x: T); >T : T >x : T >T : T foo(x: string); >foo : { (x: string): any; (x: 'a'): any; (x: T): any; } >x : string foo(x: 'a'); >foo : { (x: string): any; (x: 'a'): any; (x: T): any; } >x : 'a' foo(x: T); >foo : { (x: string): any; (x: 'a'): any; (x: T): any; } >T : T >x : T >T : T } var a3: { >a3 : { (x: 'a'): any; (x: T): any; (x: string): any; foo(x: string): any; foo(x: 'a'): any; foo(x: T): any; } (x: 'a'); >x : 'a' (x: T); >T : T >x : T >T : T (x: string); >x : string foo(x: string); >foo : { (x: string): any; (x: 'a'): any; (x: T): any; } >x : string foo(x: 'a'); >foo : { (x: string): any; (x: 'a'): any; (x: T): any; } >x : 'a' foo(x: T); >foo : { (x: string): any; (x: 'a'): any; (x: T): any; } >T : T >String : String >x : T >T : T }