File: typeInferenceLiteralUnion.types

package info (click to toggle)
node-typescript 2.1.5-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 203,952 kB
  • ctags: 52,987
  • sloc: sh: 11; makefile: 5
file content (89 lines) | stat: -rw-r--r-- 2,884 bytes parent folder | download | duplicates (2)
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
=== tests/cases/compiler/typeInferenceLiteralUnion.ts ===
// Repro from #10901
/**
 * Administrivia: JavaScript primitive types and Date
 */
export type Primitive = number | string | boolean | Date;
>Primitive : Primitive
>Date : Date

/**
 * Administrivia: anything with a valueOf(): number method is comparable, so we allow it in numeric operations
 */
interface Numeric {
>Numeric : 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: (string | number | boolean | Date | T)[]) => [string | number | boolean | Date | T, string | number | boolean | Date | T] | [undefined, undefined]
>T : T
>Numeric : Numeric
>array : (string | number | boolean | Date | T)[]
>Array : T[]
>T : T
>Primitive : Primitive
>T : T
>Primitive : Primitive
>T : T
>Primitive : Primitive

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


let extentMixed: [Primitive | NumCoercible, Primitive | NumCoercible] | [undefined, undefined];
>extentMixed : [undefined, undefined] | [string | number | boolean | Date | NumCoercible, string | number | boolean | Date | NumCoercible]
>Primitive : Primitive
>NumCoercible : NumCoercible
>Primitive : Primitive
>NumCoercible : NumCoercible

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