File: divergentAccessorsTypes1.ts

package info (click to toggle)
node-typescript 4.9.5%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 533,908 kB
  • sloc: javascript: 2,018,330; makefile: 7; sh: 1
file content (66 lines) | stat: -rw-r--r-- 1,281 bytes parent folder | download | duplicates (3)
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
// @strict: true
// @target: esnext

class Test1 {
    get foo(): string { return "" }
    set foo(s: string | number) {
        let a = s as string;
        let b = s as number;
    }

    get bar(): string | number { return "" }
    set bar(s: string | number | boolean) {
    }
}

interface Test2 {
    get foo(): string;
    set foo(s: string | number);

    get bar(): string | number;
    set bar(s: string | number | boolean);
}

type Test3 = {
    get foo(): string;
    set foo(s: string | number);

    get bar(): string | number;
    set bar(s: string | number | boolean);
};

{
    const t = new Test1();
    t.foo = 32;
    let m: string = t.foo;

    // See how CFA interacts with out-of-type writes
    t.bar = 42;
    let n: number = t.bar;
    t.bar = false;
    let o = t.bar;
}

{
    const t = {} as Test2;
    t.foo = 32;
    let m: string = t.foo;

    // See how CFA interacts with out-of-type writes
    t.bar = 42;
    let n: number = t.bar;
    t.bar = false;
    let o = t.bar;
}

{
    const t = {} as Test3;
    t.foo = 32;
    let m: string = t.foo;

    // See how CFA interacts with out-of-type writes
    t.bar = 42;
    let n: number = t.bar;
    t.bar = false;
    let o = t.bar;
}