Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 52f8ae3

Browse filesBrowse files
author
Yui T
committed
Tuple conformance
1 parent 060a8b6 commit 52f8ae3
Copy full SHA for 52f8ae3

25 files changed

+1,152Lines changed: 1152 additions & 0 deletions
Expand file treeCollapse file tree
Open diff view settings
Collapse file
+36Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatBetweenTupleAndArray.ts(17,1): error TS2322: Type '[number, string]' is not assignable to type 'number[]':
2+
Types of property 'pop' are incompatible:
3+
Type '() => {}' is not assignable to type '() => number':
4+
Type '{}' is not assignable to type 'number'.
5+
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatBetweenTupleAndArray.ts(18,1): error TS2322: Type '{}[]' is not assignable to type '[{}]':
6+
Property '0' is missing in type '{}[]'.
7+
8+
9+
==== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatBetweenTupleAndArray.ts (2 errors) ====
10+
var numStrTuple: [number, string];
11+
var numNumTuple: [number, number];
12+
var numEmptyObjTuple: [number, {}];
13+
var emptyObjTuple: [{}];
14+
15+
var numArray: number[];
16+
var emptyObjArray: {}[];
17+
18+
// no error
19+
numArray = numNumTuple;
20+
emptyObjArray = emptyObjTuple;
21+
emptyObjArray = numStrTuple;
22+
emptyObjArray = numNumTuple;
23+
emptyObjArray = numEmptyObjTuple;
24+
25+
// error
26+
numArray = numStrTuple;
27+
~~~~~~~~
28+
!!! error TS2322: Type '[number, string]' is not assignable to type 'number[]':
29+
!!! error TS2322: Types of property 'pop' are incompatible:
30+
!!! error TS2322: Type '() => {}' is not assignable to type '() => number':
31+
!!! error TS2322: Type '{}' is not assignable to type 'number'.
32+
emptyObjTuple = emptyObjArray;
33+
~~~~~~~~~~~~~
34+
!!! error TS2322: Type '{}[]' is not assignable to type '[{}]':
35+
!!! error TS2322: Property '0' is missing in type '{}[]'.
36+
Collapse file
+37Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
//// [assignmentCompatBetweenTupleAndArray.ts]
2+
var numStrTuple: [number, string];
3+
var numNumTuple: [number, number];
4+
var numEmptyObjTuple: [number, {}];
5+
var emptyObjTuple: [{}];
6+
7+
var numArray: number[];
8+
var emptyObjArray: {}[];
9+
10+
// no error
11+
numArray = numNumTuple;
12+
emptyObjArray = emptyObjTuple;
13+
emptyObjArray = numStrTuple;
14+
emptyObjArray = numNumTuple;
15+
emptyObjArray = numEmptyObjTuple;
16+
17+
// error
18+
numArray = numStrTuple;
19+
emptyObjTuple = emptyObjArray;
20+
21+
22+
//// [assignmentCompatBetweenTupleAndArray.js]
23+
var numStrTuple;
24+
var numNumTuple;
25+
var numEmptyObjTuple;
26+
var emptyObjTuple;
27+
var numArray;
28+
var emptyObjArray;
29+
// no error
30+
numArray = numNumTuple;
31+
emptyObjArray = emptyObjTuple;
32+
emptyObjArray = numStrTuple;
33+
emptyObjArray = numNumTuple;
34+
emptyObjArray = numEmptyObjTuple;
35+
// error
36+
numArray = numStrTuple;
37+
emptyObjTuple = emptyObjArray;
Collapse file
+58Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
//// [bestCommonTypeOfTuple.ts]
2+
function f1(x: number): string { return "foo"; }
3+
4+
function f2(x: number): number { return 10; }
5+
6+
function f3(x: number): boolean { return true; }
7+
8+
enum E1 { one }
9+
10+
enum E2 { two }
11+
12+
13+
var t1: [(x: number) => string, (x: number) => number];
14+
var t2: [E1, E2];
15+
var t3: [number, any];
16+
var t4: [E1, E2, number];
17+
18+
// no error
19+
t1 = [f1, f2];
20+
t2 = [E1.one, E2.two];
21+
t3 = [5, undefined];
22+
t4 = [E1.one, E2.two, 20];
23+
var e1 = t1[2]; // {}
24+
var e2 = t2[2]; // {}
25+
var e3 = t3[2]; // any
26+
var e4 = t4[3]; // number
27+
28+
//// [bestCommonTypeOfTuple.js]
29+
function f1(x) {
30+
return "foo";
31+
}
32+
function f2(x) {
33+
return 10;
34+
}
35+
function f3(x) {
36+
return true;
37+
}
38+
var E1;
39+
(function (E1) {
40+
E1[E1["one"] = 0] = "one";
41+
})(E1 || (E1 = {}));
42+
var E2;
43+
(function (E2) {
44+
E2[E2["two"] = 0] = "two";
45+
})(E2 || (E2 = {}));
46+
var t1;
47+
var t2;
48+
var t3;
49+
var t4;
50+
// no error
51+
t1 = [f1, f2];
52+
t2 = [0 /* one */, 0 /* two */];
53+
t3 = [5, undefined];
54+
t4 = [0 /* one */, 0 /* two */, 20];
55+
var e1 = t1[2]; // {}
56+
var e2 = t2[2]; // {}
57+
var e3 = t3[2]; // any
58+
var e4 = t4[3]; // number
Collapse file
+96Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
=== tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfTuple.ts ===
2+
function f1(x: number): string { return "foo"; }
3+
>f1 : (x: number) => string
4+
>x : number
5+
6+
function f2(x: number): number { return 10; }
7+
>f2 : (x: number) => number
8+
>x : number
9+
10+
function f3(x: number): boolean { return true; }
11+
>f3 : (x: number) => boolean
12+
>x : number
13+
14+
enum E1 { one }
15+
>E1 : E1
16+
>one : E1
17+
18+
enum E2 { two }
19+
>E2 : E2
20+
>two : E2
21+
22+
23+
var t1: [(x: number) => string, (x: number) => number];
24+
>t1 : [(x: number) => string, (x: number) => number]
25+
>x : number
26+
>x : number
27+
28+
var t2: [E1, E2];
29+
>t2 : [E1, E2]
30+
>E1 : E1
31+
>E2 : E2
32+
33+
var t3: [number, any];
34+
>t3 : [number, any]
35+
36+
var t4: [E1, E2, number];
37+
>t4 : [E1, E2, number]
38+
>E1 : E1
39+
>E2 : E2
40+
41+
// no error
42+
t1 = [f1, f2];
43+
>t1 = [f1, f2] : [(x: number) => string, (x: number) => number]
44+
>t1 : [(x: number) => string, (x: number) => number]
45+
>[f1, f2] : [(x: number) => string, (x: number) => number]
46+
>f1 : (x: number) => string
47+
>f2 : (x: number) => number
48+
49+
t2 = [E1.one, E2.two];
50+
>t2 = [E1.one, E2.two] : [E1, E2]
51+
>t2 : [E1, E2]
52+
>[E1.one, E2.two] : [E1, E2]
53+
>E1.one : E1
54+
>E1 : typeof E1
55+
>one : E1
56+
>E2.two : E2
57+
>E2 : typeof E2
58+
>two : E2
59+
60+
t3 = [5, undefined];
61+
>t3 = [5, undefined] : [number, undefined]
62+
>t3 : [number, any]
63+
>[5, undefined] : [number, undefined]
64+
>undefined : undefined
65+
66+
t4 = [E1.one, E2.two, 20];
67+
>t4 = [E1.one, E2.two, 20] : [E1, E2, number]
68+
>t4 : [E1, E2, number]
69+
>[E1.one, E2.two, 20] : [E1, E2, number]
70+
>E1.one : E1
71+
>E1 : typeof E1
72+
>one : E1
73+
>E2.two : E2
74+
>E2 : typeof E2
75+
>two : E2
76+
77+
var e1 = t1[2]; // {}
78+
>e1 : {}
79+
>t1[2] : {}
80+
>t1 : [(x: number) => string, (x: number) => number]
81+
82+
var e2 = t2[2]; // {}
83+
>e2 : {}
84+
>t2[2] : {}
85+
>t2 : [E1, E2]
86+
87+
var e3 = t3[2]; // any
88+
>e3 : any
89+
>t3[2] : any
90+
>t3 : [number, any]
91+
92+
var e4 = t4[3]; // number
93+
>e4 : number
94+
>t4[3] : number
95+
>t4 : [E1, E2, number]
96+
Collapse file
+77Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
//// [bestCommonTypeOfTuple2.ts]
2+
interface base { }
3+
interface base1 { i }
4+
class C implements base { c }
5+
class D implements base { d }
6+
class E implements base { e }
7+
class F extends C { f }
8+
9+
class C1 implements base1 { i = "foo"; c }
10+
class D1 extends C1 { i = "bar"; d }
11+
12+
var t1: [C, base];
13+
var t2: [C, D];
14+
var t3: [C1, D1];
15+
var t4: [base1, C1];
16+
var t5: [C1, F]
17+
18+
var e11 = t1[4]; // base
19+
var e21 = t2[4]; // {}
20+
var e31 = t3[4]; // C1
21+
var e41 = t4[2]; // base1
22+
var e51 = t5[2]; // {}
23+
24+
25+
//// [bestCommonTypeOfTuple2.js]
26+
var __extends = this.__extends || function (d, b) {
27+
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
28+
function __() { this.constructor = d; }
29+
__.prototype = b.prototype;
30+
d.prototype = new __();
31+
};
32+
var C = (function () {
33+
function C() {
34+
}
35+
return C;
36+
})();
37+
var D = (function () {
38+
function D() {
39+
}
40+
return D;
41+
})();
42+
var E = (function () {
43+
function E() {
44+
}
45+
return E;
46+
})();
47+
var F = (function (_super) {
48+
__extends(F, _super);
49+
function F() {
50+
_super.apply(this, arguments);
51+
}
52+
return F;
53+
})(C);
54+
var C1 = (function () {
55+
function C1() {
56+
this.i = "foo";
57+
}
58+
return C1;
59+
})();
60+
var D1 = (function (_super) {
61+
__extends(D1, _super);
62+
function D1() {
63+
_super.apply(this, arguments);
64+
this.i = "bar";
65+
}
66+
return D1;
67+
})(C1);
68+
var t1;
69+
var t2;
70+
var t3;
71+
var t4;
72+
var t5;
73+
var e11 = t1[4]; // base
74+
var e21 = t2[4]; // {}
75+
var e31 = t3[4]; // C1
76+
var e41 = t4[2]; // base1
77+
var e51 = t5[2]; // {}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.