File: typeInferenceLiteralUnion.types

package info (click to toggle)
node-typescript 4.9.5%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 533,908 kB
  • sloc: javascript: 2,018,330; makefile: 7; sh: 1
file content (73 lines) | stat: -rw-r--r-- 2,289 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
=== tests/cases/compiler/typeInferenceLiteralUnion.ts ===
// Repro from #10901
/**
 * Administrivia: JavaScript primitive types and Date
 */
export type Primitive = number | string | boolean | Date;
>Primitive : string | number | boolean | Date

/**
 * Administrivia: anything with a valueOf(): number method is comparable, so we allow it in numeric operations
 */
interface Numeric {
    valueOf(): number;
>valueOf : () => number
}

// Not very useful, but meets Numeric
class NumCoercible {
>NumCoercible : NumCoercible

    public a: number;
>a : number

    constructor(a: number) {
>a : number

        this.a = a;
>this.a = a : number
>this.a : number
>this : this
>a : number
>a : number
    }
    public valueOf() {
>valueOf : () => number

        return this.a;
>this.a : number
>this : this
>a : number
    }
}

/**
 * Return the min and max simultaneously.
 */
export function extent<T extends Numeric>(array: Array<T | Primitive>): [T | Primitive, T | Primitive] | [undefined, undefined] {
>extent : <T extends Numeric>(array: Array<T | Primitive>) => [T | Primitive, T | Primitive] | [undefined, undefined]
>array : (Primitive | T)[]

    return [undefined, undefined];
>[undefined, undefined] : [undefined, undefined]
>undefined : undefined
>undefined : undefined
}


let extentMixed: [Primitive | NumCoercible, Primitive | NumCoercible] | [undefined, undefined];
>extentMixed : [undefined, undefined] | [Primitive | NumCoercible, Primitive | NumCoercible]

extentMixed = extent([new NumCoercible(10), 13, '12', true]);
>extentMixed = extent([new NumCoercible(10), 13, '12', true]) : [undefined, undefined] | [Primitive | NumCoercible, Primitive | NumCoercible]
>extentMixed : [undefined, undefined] | [Primitive | NumCoercible, Primitive | NumCoercible]
>extent([new NumCoercible(10), 13, '12', true]) : [undefined, undefined] | [Primitive | NumCoercible, Primitive | NumCoercible]
>extent : <T extends Numeric>(array: (Primitive | T)[]) => [Primitive | T, Primitive | T] | [undefined, undefined]
>[new NumCoercible(10), 13, '12', true] : (string | number | true | NumCoercible)[]
>new NumCoercible(10) : NumCoercible
>NumCoercible : typeof NumCoercible
>10 : 10
>13 : 13
>'12' : "12"
>true : true