File: mappedTypes3.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 (138 lines) | stat: -rw-r--r-- 2,553 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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
=== tests/cases/conformance/types/mapped/mappedTypes3.ts ===

class Box<P> {
>Box : Box<P>
>P : P

    value: P;
>value : P
>P : P
}

type Boxified<T> = {
>Boxified : Boxified<T>
>T : T

    [K in keyof T]: Box<T[K]>;
>K : K
>T : T
>Box : Box<P>
>T : T
>K : K
}

declare function boxify<T>(obj: T): Boxified<T>;
>boxify : <T>(obj: T) => Boxified<T>
>T : T
>obj : T
>T : T
>Boxified : Boxified<T>
>T : T

declare function unboxify<T>(obj: Boxified<T>): T;
>unboxify : <T>(obj: Boxified<T>) => T
>T : T
>obj : Boxified<T>
>Boxified : Boxified<T>
>T : T
>T : T

interface Bacon {
>Bacon : Bacon

    isPerfect: boolean;
>isPerfect : boolean

    weight: number;
>weight : number
}

interface BoxifiedBacon {
>BoxifiedBacon : BoxifiedBacon

    isPerfect: Box<boolean>;
>isPerfect : Box<boolean>
>Box : Box<P>

    weight: Box<number>;
>weight : Box<number>
>Box : Box<P>
}

function f1(b: Bacon) {
>f1 : (b: Bacon) => void
>b : Bacon
>Bacon : Bacon

    let bb = boxify(b);
>bb : Boxified<Bacon>
>boxify(b) : Boxified<Bacon>
>boxify : <T>(obj: T) => Boxified<T>
>b : Bacon

    let isPerfect = bb.isPerfect.value;
>isPerfect : boolean
>bb.isPerfect.value : boolean
>bb.isPerfect : Box<boolean>
>bb : Boxified<Bacon>
>isPerfect : Box<boolean>
>value : boolean

    let weight = bb.weight.value;
>weight : number
>bb.weight.value : number
>bb.weight : Box<number>
>bb : Boxified<Bacon>
>weight : Box<number>
>value : number
}

function f2(bb: Boxified<Bacon>) {
>f2 : (bb: Boxified<Bacon>) => void
>bb : Boxified<Bacon>
>Boxified : Boxified<T>
>Bacon : Bacon

    let b = unboxify(bb);  // Infer Bacon for T
>b : Bacon
>unboxify(bb) : Bacon
>unboxify : <T>(obj: Boxified<T>) => T
>bb : Boxified<Bacon>

    let bool = b.isPerfect;
>bool : boolean
>b.isPerfect : boolean
>b : Bacon
>isPerfect : boolean

    let weight = b.weight;
>weight : number
>b.weight : number
>b : Bacon
>weight : number
}

function f3(bb: BoxifiedBacon) {
>f3 : (bb: BoxifiedBacon) => void
>bb : BoxifiedBacon
>BoxifiedBacon : BoxifiedBacon

    let b = unboxify<Bacon>(bb);  // Explicit type parameter required
>b : Bacon
>unboxify<Bacon>(bb) : Bacon
>unboxify : <T>(obj: Boxified<T>) => T
>Bacon : Bacon
>bb : BoxifiedBacon

    let bool = b.isPerfect;
>bool : boolean
>b.isPerfect : boolean
>b : Bacon
>isPerfect : boolean

    let weight = bb.weight;
>weight : Box<number>
>bb.weight : Box<number>
>bb : BoxifiedBacon
>weight : Box<number>
}