Skip to content

Commit 68f51da

Browse files
committed
Add regression test
1 parent 4f90085 commit 68f51da

4 files changed

Lines changed: 143 additions & 0 deletions

File tree

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//// [optionalTupleElementsAndUndefined.ts]
2+
// Repro from #50753
3+
4+
type UnNullify<T> = { [K in keyof T]: NonNullable<T[K]> };
5+
6+
type Foo = UnNullify<[a: 1, b?: 2 | undefined]>;
7+
8+
type Test = [a: 1, b?: 2] extends Foo ? true : false; // true
9+
10+
// Types in the following declarations should be identical
11+
12+
var v: [1, 2?];
13+
var v: [1, (2 | undefined)?];
14+
var v: [a: 1, b?: 2];
15+
var v: [a: 1, b?: 2 | undefined];
16+
var v: UnNullify<[1, 2?]>;
17+
var v: UnNullify<[1, (2 | undefined)?]>;
18+
var v: UnNullify<[a: 1, b?: 2]>;
19+
var v: UnNullify<[a: 1, b?: 2 | undefined]>;
20+
21+
22+
//// [optionalTupleElementsAndUndefined.js]
23+
"use strict";
24+
// Repro from #50753
25+
// Types in the following declarations should be identical
26+
var v;
27+
var v;
28+
var v;
29+
var v;
30+
var v;
31+
var v;
32+
var v;
33+
var v;
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
=== tests/cases/compiler/optionalTupleElementsAndUndefined.ts ===
2+
// Repro from #50753
3+
4+
type UnNullify<T> = { [K in keyof T]: NonNullable<T[K]> };
5+
>UnNullify : Symbol(UnNullify, Decl(optionalTupleElementsAndUndefined.ts, 0, 0))
6+
>T : Symbol(T, Decl(optionalTupleElementsAndUndefined.ts, 2, 15))
7+
>K : Symbol(K, Decl(optionalTupleElementsAndUndefined.ts, 2, 23))
8+
>T : Symbol(T, Decl(optionalTupleElementsAndUndefined.ts, 2, 15))
9+
>NonNullable : Symbol(NonNullable, Decl(lib.es5.d.ts, --, --))
10+
>T : Symbol(T, Decl(optionalTupleElementsAndUndefined.ts, 2, 15))
11+
>K : Symbol(K, Decl(optionalTupleElementsAndUndefined.ts, 2, 23))
12+
13+
type Foo = UnNullify<[a: 1, b?: 2 | undefined]>;
14+
>Foo : Symbol(Foo, Decl(optionalTupleElementsAndUndefined.ts, 2, 58))
15+
>UnNullify : Symbol(UnNullify, Decl(optionalTupleElementsAndUndefined.ts, 0, 0))
16+
17+
type Test = [a: 1, b?: 2] extends Foo ? true : false; // true
18+
>Test : Symbol(Test, Decl(optionalTupleElementsAndUndefined.ts, 4, 48))
19+
>Foo : Symbol(Foo, Decl(optionalTupleElementsAndUndefined.ts, 2, 58))
20+
21+
// Types in the following declarations should be identical
22+
23+
var v: [1, 2?];
24+
>v : Symbol(v, Decl(optionalTupleElementsAndUndefined.ts, 10, 3), Decl(optionalTupleElementsAndUndefined.ts, 11, 3), Decl(optionalTupleElementsAndUndefined.ts, 12, 3), Decl(optionalTupleElementsAndUndefined.ts, 13, 3), Decl(optionalTupleElementsAndUndefined.ts, 14, 3) ... and 3 more)
25+
26+
var v: [1, (2 | undefined)?];
27+
>v : Symbol(v, Decl(optionalTupleElementsAndUndefined.ts, 10, 3), Decl(optionalTupleElementsAndUndefined.ts, 11, 3), Decl(optionalTupleElementsAndUndefined.ts, 12, 3), Decl(optionalTupleElementsAndUndefined.ts, 13, 3), Decl(optionalTupleElementsAndUndefined.ts, 14, 3) ... and 3 more)
28+
29+
var v: [a: 1, b?: 2];
30+
>v : Symbol(v, Decl(optionalTupleElementsAndUndefined.ts, 10, 3), Decl(optionalTupleElementsAndUndefined.ts, 11, 3), Decl(optionalTupleElementsAndUndefined.ts, 12, 3), Decl(optionalTupleElementsAndUndefined.ts, 13, 3), Decl(optionalTupleElementsAndUndefined.ts, 14, 3) ... and 3 more)
31+
32+
var v: [a: 1, b?: 2 | undefined];
33+
>v : Symbol(v, Decl(optionalTupleElementsAndUndefined.ts, 10, 3), Decl(optionalTupleElementsAndUndefined.ts, 11, 3), Decl(optionalTupleElementsAndUndefined.ts, 12, 3), Decl(optionalTupleElementsAndUndefined.ts, 13, 3), Decl(optionalTupleElementsAndUndefined.ts, 14, 3) ... and 3 more)
34+
35+
var v: UnNullify<[1, 2?]>;
36+
>v : Symbol(v, Decl(optionalTupleElementsAndUndefined.ts, 10, 3), Decl(optionalTupleElementsAndUndefined.ts, 11, 3), Decl(optionalTupleElementsAndUndefined.ts, 12, 3), Decl(optionalTupleElementsAndUndefined.ts, 13, 3), Decl(optionalTupleElementsAndUndefined.ts, 14, 3) ... and 3 more)
37+
>UnNullify : Symbol(UnNullify, Decl(optionalTupleElementsAndUndefined.ts, 0, 0))
38+
39+
var v: UnNullify<[1, (2 | undefined)?]>;
40+
>v : Symbol(v, Decl(optionalTupleElementsAndUndefined.ts, 10, 3), Decl(optionalTupleElementsAndUndefined.ts, 11, 3), Decl(optionalTupleElementsAndUndefined.ts, 12, 3), Decl(optionalTupleElementsAndUndefined.ts, 13, 3), Decl(optionalTupleElementsAndUndefined.ts, 14, 3) ... and 3 more)
41+
>UnNullify : Symbol(UnNullify, Decl(optionalTupleElementsAndUndefined.ts, 0, 0))
42+
43+
var v: UnNullify<[a: 1, b?: 2]>;
44+
>v : Symbol(v, Decl(optionalTupleElementsAndUndefined.ts, 10, 3), Decl(optionalTupleElementsAndUndefined.ts, 11, 3), Decl(optionalTupleElementsAndUndefined.ts, 12, 3), Decl(optionalTupleElementsAndUndefined.ts, 13, 3), Decl(optionalTupleElementsAndUndefined.ts, 14, 3) ... and 3 more)
45+
>UnNullify : Symbol(UnNullify, Decl(optionalTupleElementsAndUndefined.ts, 0, 0))
46+
47+
var v: UnNullify<[a: 1, b?: 2 | undefined]>;
48+
>v : Symbol(v, Decl(optionalTupleElementsAndUndefined.ts, 10, 3), Decl(optionalTupleElementsAndUndefined.ts, 11, 3), Decl(optionalTupleElementsAndUndefined.ts, 12, 3), Decl(optionalTupleElementsAndUndefined.ts, 13, 3), Decl(optionalTupleElementsAndUndefined.ts, 14, 3) ... and 3 more)
49+
>UnNullify : Symbol(UnNullify, Decl(optionalTupleElementsAndUndefined.ts, 0, 0))
50+
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
=== tests/cases/compiler/optionalTupleElementsAndUndefined.ts ===
2+
// Repro from #50753
3+
4+
type UnNullify<T> = { [K in keyof T]: NonNullable<T[K]> };
5+
>UnNullify : UnNullify<T>
6+
7+
type Foo = UnNullify<[a: 1, b?: 2 | undefined]>;
8+
>Foo : [a: 1, b?: 2 | undefined]
9+
10+
type Test = [a: 1, b?: 2] extends Foo ? true : false; // true
11+
>Test : true
12+
>true : true
13+
>false : false
14+
15+
// Types in the following declarations should be identical
16+
17+
var v: [1, 2?];
18+
>v : [1, (2 | undefined)?]
19+
20+
var v: [1, (2 | undefined)?];
21+
>v : [1, (2 | undefined)?]
22+
23+
var v: [a: 1, b?: 2];
24+
>v : [1, (2 | undefined)?]
25+
26+
var v: [a: 1, b?: 2 | undefined];
27+
>v : [1, (2 | undefined)?]
28+
29+
var v: UnNullify<[1, 2?]>;
30+
>v : [1, (2 | undefined)?]
31+
32+
var v: UnNullify<[1, (2 | undefined)?]>;
33+
>v : [1, (2 | undefined)?]
34+
35+
var v: UnNullify<[a: 1, b?: 2]>;
36+
>v : [1, (2 | undefined)?]
37+
38+
var v: UnNullify<[a: 1, b?: 2 | undefined]>;
39+
>v : [1, (2 | undefined)?]
40+
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// @strict: true
2+
3+
// Repro from #50753
4+
5+
type UnNullify<T> = { [K in keyof T]: NonNullable<T[K]> };
6+
7+
type Foo = UnNullify<[a: 1, b?: 2 | undefined]>;
8+
9+
type Test = [a: 1, b?: 2] extends Foo ? true : false; // true
10+
11+
// Types in the following declarations should be identical
12+
13+
var v: [1, 2?];
14+
var v: [1, (2 | undefined)?];
15+
var v: [a: 1, b?: 2];
16+
var v: [a: 1, b?: 2 | undefined];
17+
var v: UnNullify<[1, 2?]>;
18+
var v: UnNullify<[1, (2 | undefined)?]>;
19+
var v: UnNullify<[a: 1, b?: 2]>;
20+
var v: UnNullify<[a: 1, b?: 2 | undefined]>;

0 commit comments

Comments
 (0)