File: nonPrimitiveInGeneric.js

package info (click to toggle)
node-typescript 3.3.3333-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 324,548 kB
  • sloc: makefile: 6; sh: 3
file content (93 lines) | stat: -rw-r--r-- 1,823 bytes parent folder | download | duplicates (5)
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
//// [nonPrimitiveInGeneric.ts]
function generic<T>(t: T) {
    var o: object = t; // expect error
}
var a = {};
var b = "42";

generic<object>({});
generic<object>(a);
generic<object>(123); // expect error
generic<object>(b); // expect error

function bound<T extends object>(t: T) {
    var o: object = t; // ok
}

bound({});
bound(a);
bound(123); // expect error
bound(b); // expect error

function bound2<T extends object>() {}

bound2<{}>();
bound2<Object>();
bound2<number>(); // expect error
bound2<string>(); // expect error

function bound3<T extends {}>(t: T) {
    var o: object = t; // ok
}

interface Proxy<T extends object> {}

var x: Proxy<number>; // error
var y: Proxy<null>; // ok
var z: Proxy<undefined> ; // ok


interface Blah {
    foo: number;
}

var u: Proxy<Blah>; // ok


//// [nonPrimitiveInGeneric.js]
function generic(t) {
    var o = t; // expect error
}
var a = {};
var b = "42";
generic({});
generic(a);
generic(123); // expect error
generic(b); // expect error
function bound(t) {
    var o = t; // ok
}
bound({});
bound(a);
bound(123); // expect error
bound(b); // expect error
function bound2() { }
bound2();
bound2();
bound2(); // expect error
bound2(); // expect error
function bound3(t) {
    var o = t; // ok
}
var x; // error
var y; // ok
var z; // ok
var u; // ok


//// [nonPrimitiveInGeneric.d.ts]
declare function generic<T>(t: T): void;
declare var a: {};
declare var b: string;
declare function bound<T extends object>(t: T): void;
declare function bound2<T extends object>(): void;
declare function bound3<T extends {}>(t: T): void;
interface Proxy<T extends object> {
}
declare var x: Proxy<number>;
declare var y: Proxy<null>;
declare var z: Proxy<undefined>;
interface Blah {
    foo: number;
}
declare var u: Proxy<Blah>;