File: nonNullableTypes1.types

package info (click to toggle)
node-typescript 5.0.4%2Bds1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 459,116 kB
  • sloc: javascript: 1,972,754; makefile: 6; sh: 1
file content (95 lines) | stat: -rw-r--r-- 1,877 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
=== tests/cases/compiler/nonNullableTypes1.ts ===
function f1<T>(x: T) {
>f1 : <T>(x: T) => void
>x : T

    let y = x || "hello";  // NonNullable<T> | string
>y : string | NonNullable<T>
>x || "hello" : "hello" | NonNullable<T>
>x : T
>"hello" : "hello"
}

function error(): never {
>error : () => never

    throw new Error();
>new Error() : Error
>Error : ErrorConstructor
}

function f2<T>(x: T) {  // NonNullable<T>
>f2 : <T>(x: T) => NonNullable<T>
>x : T

    return x || error();
>x || error() : NonNullable<T>
>x : T
>error() : never
>error : () => never
}

function f3(x: unknown) {
>f3 : (x: unknown) => void
>x : unknown

    let y = x!;  // {}
>y : {}
>x! : {}
>x : unknown
}

function f4<T extends { x: string } | undefined>(obj: T) {
>f4 : <T extends { x: string; } | undefined>(obj: T) => void
>x : string
>obj : T

    if (obj?.x === "hello") {
>obj?.x === "hello" : boolean
>obj?.x : string | undefined
>obj : { x: string; } | undefined
>x : string | undefined
>"hello" : "hello"

        obj;  // NonNullable<T>
>obj : NonNullable<T>
    }
    if (obj?.x) {
>obj?.x : string | undefined
>obj : { x: string; } | undefined
>x : string | undefined

        obj;  // NonNullable<T>
>obj : NonNullable<T>
    }
    if (typeof obj?.x === "string") {
>typeof obj?.x === "string" : boolean
>typeof obj?.x : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>obj?.x : string | undefined
>obj : { x: string; } | undefined
>x : string | undefined
>"string" : "string"

        obj;  // NonNullable<T>
>obj : NonNullable<T>
    }
}

class A {
>A : A

    x = "hello";
>x : string
>"hello" : "hello"

    foo() {
>foo : () => void

        let zz = this?.x;  // string
>zz : string
>this?.x : string
>this : this
>x : string
    }
}