File: overloadAssignmentCompat.types

package info (click to toggle)
node-typescript 3.3.3333-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 324,548 kB
  • sloc: makefile: 6; sh: 3
file content (90 lines) | stat: -rw-r--r-- 2,806 bytes parent folder | download | duplicates (5)
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"