1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
=== tests/cases/compiler/overloadAssignmentCompat.ts ===
// ok - overload signatures are assignment compatible with their implementation
class Accessor {}
>Accessor : Accessor
function attr(name: string): string;
>attr : { (name: string): string; (name: string, value: string): Accessor; (map: any): Accessor; }
>name : string
function attr(name: string, value: string): Accessor;
>attr : { (name: string): string; (name: string, value: string): Accessor; (map: any): Accessor; }
>name : string
>value : string
function attr(map: any): Accessor;
>attr : { (name: string): string; (name: string, value: string): Accessor; (map: any): Accessor; }
>map : any
function attr(nameOrMap: any, value?: string): any {
>attr : { (name: string): string; (name: string, value: string): Accessor; (map: any): Accessor; }
>nameOrMap : any
>value : string
if (nameOrMap && typeof nameOrMap === "object") {
>nameOrMap && typeof nameOrMap === "object" : boolean
>nameOrMap : any
>typeof nameOrMap === "object" : boolean
>typeof nameOrMap : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>nameOrMap : any
>"object" : "object"
// handle map case
return new Accessor;
>new Accessor : Accessor
>Accessor : typeof Accessor
}
else {
// handle string case
return "s";
>"s" : "s"
}
}
// not ok - there's an assignment compat error
function attr2(name: string): string;
>attr2 : { (name: string): string; (name: string, value: string): Accessor; (map: any): Accessor; }
>name : string
function attr2(name: string, value: string): Accessor;
>attr2 : { (name: string): string; (name: string, value: string): Accessor; (map: any): Accessor; }
>name : string
>value : string
function attr2(map: any): Accessor;
>attr2 : { (name: string): string; (name: string, value: string): Accessor; (map: any): Accessor; }
>map : any
function attr2(nameOrMap: any, value?: string): string {
>attr2 : { (name: string): string; (name: string, value: string): Accessor; (map: any): Accessor; }
>nameOrMap : any
>value : string
if (nameOrMap && typeof nameOrMap === "object") {
>nameOrMap && typeof nameOrMap === "object" : boolean
>nameOrMap : any
>typeof nameOrMap === "object" : boolean
>typeof nameOrMap : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>nameOrMap : any
>"object" : "object"
// handle map case
return "t";
>"t" : "t"
}
else {
// handle string case
return "s";
>"s" : "s"
}
}
// error - signatures are not assignment compatible
function foo():number;
>foo : () => number
function foo():string { return "a" };
>foo : () => number
>"a" : "a"
|