Skip to content

Commit 44887b0

Browse files
committed
Add test
1 parent 5c92af1 commit 44887b0

File tree

5 files changed

+154
-0
lines changed

5 files changed

+154
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
tests/cases/compiler/inferRestArgumentsMappedTuple.ts(16,7): error TS2322: Type '[unknown, unknown]' is not assignable to type '[string, number]'.
2+
Type at position 0 in source is not compatible with type at position 0 in target.
3+
Type 'unknown' is not assignable to type 'string'.
4+
5+
6+
==== tests/cases/compiler/inferRestArgumentsMappedTuple.ts (1 errors) ====
7+
type MyMappedType<Primitive extends any> = {
8+
primitive: Primitive;
9+
};
10+
11+
type TupleMapperOld<Tuple extends any[]> = {
12+
[Key in keyof Tuple]: Tuple[Key] extends Tuple[number] ? MyMappedType<Tuple[Key]> : never;
13+
};
14+
15+
// [MyMappedType<string>, MyMappedType<number>]
16+
type MyMappedTupleOld = TupleMapperOld<[string, number]>;
17+
// ^?
18+
19+
declare function extractPrimitivesOld<Tuple extends any[]>(...mappedTypes: TupleMapperOld<Tuple>): Tuple;
20+
21+
// [string, number]
22+
const myPrimitiveTupleOld: [string, number] = extractPrimitivesOld({ primitive: "" }, { primitive: 0 });
23+
~~~~~~~~~~~~~~~~~~~
24+
!!! error TS2322: Type '[unknown, unknown]' is not assignable to type '[string, number]'.
25+
!!! error TS2322: Type at position 0 in source is not compatible with type at position 0 in target.
26+
!!! error TS2322: Type 'unknown' is not assignable to type 'string'.
27+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//// [inferRestArgumentsMappedTuple.ts]
2+
type MyMappedType<Primitive extends any> = {
3+
primitive: Primitive;
4+
};
5+
6+
type TupleMapperOld<Tuple extends any[]> = {
7+
[Key in keyof Tuple]: Tuple[Key] extends Tuple[number] ? MyMappedType<Tuple[Key]> : never;
8+
};
9+
10+
// [MyMappedType<string>, MyMappedType<number>]
11+
type MyMappedTupleOld = TupleMapperOld<[string, number]>;
12+
// ^?
13+
14+
declare function extractPrimitivesOld<Tuple extends any[]>(...mappedTypes: TupleMapperOld<Tuple>): Tuple;
15+
16+
// [string, number]
17+
const myPrimitiveTupleOld: [string, number] = extractPrimitivesOld({ primitive: "" }, { primitive: 0 });
18+
19+
20+
//// [inferRestArgumentsMappedTuple.js]
21+
"use strict";
22+
// [string, number]
23+
var myPrimitiveTupleOld = extractPrimitivesOld({ primitive: "" }, { primitive: 0 });
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
=== tests/cases/compiler/inferRestArgumentsMappedTuple.ts ===
2+
type MyMappedType<Primitive extends any> = {
3+
>MyMappedType : Symbol(MyMappedType, Decl(inferRestArgumentsMappedTuple.ts, 0, 0))
4+
>Primitive : Symbol(Primitive, Decl(inferRestArgumentsMappedTuple.ts, 0, 18))
5+
6+
primitive: Primitive;
7+
>primitive : Symbol(primitive, Decl(inferRestArgumentsMappedTuple.ts, 0, 44))
8+
>Primitive : Symbol(Primitive, Decl(inferRestArgumentsMappedTuple.ts, 0, 18))
9+
10+
};
11+
12+
type TupleMapperOld<Tuple extends any[]> = {
13+
>TupleMapperOld : Symbol(TupleMapperOld, Decl(inferRestArgumentsMappedTuple.ts, 2, 2))
14+
>Tuple : Symbol(Tuple, Decl(inferRestArgumentsMappedTuple.ts, 4, 20))
15+
16+
[Key in keyof Tuple]: Tuple[Key] extends Tuple[number] ? MyMappedType<Tuple[Key]> : never;
17+
>Key : Symbol(Key, Decl(inferRestArgumentsMappedTuple.ts, 5, 2))
18+
>Tuple : Symbol(Tuple, Decl(inferRestArgumentsMappedTuple.ts, 4, 20))
19+
>Tuple : Symbol(Tuple, Decl(inferRestArgumentsMappedTuple.ts, 4, 20))
20+
>Key : Symbol(Key, Decl(inferRestArgumentsMappedTuple.ts, 5, 2))
21+
>Tuple : Symbol(Tuple, Decl(inferRestArgumentsMappedTuple.ts, 4, 20))
22+
>MyMappedType : Symbol(MyMappedType, Decl(inferRestArgumentsMappedTuple.ts, 0, 0))
23+
>Tuple : Symbol(Tuple, Decl(inferRestArgumentsMappedTuple.ts, 4, 20))
24+
>Key : Symbol(Key, Decl(inferRestArgumentsMappedTuple.ts, 5, 2))
25+
26+
};
27+
28+
// [MyMappedType<string>, MyMappedType<number>]
29+
type MyMappedTupleOld = TupleMapperOld<[string, number]>;
30+
>MyMappedTupleOld : Symbol(MyMappedTupleOld, Decl(inferRestArgumentsMappedTuple.ts, 6, 2))
31+
>TupleMapperOld : Symbol(TupleMapperOld, Decl(inferRestArgumentsMappedTuple.ts, 2, 2))
32+
33+
// ^?
34+
35+
declare function extractPrimitivesOld<Tuple extends any[]>(...mappedTypes: TupleMapperOld<Tuple>): Tuple;
36+
>extractPrimitivesOld : Symbol(extractPrimitivesOld, Decl(inferRestArgumentsMappedTuple.ts, 9, 57))
37+
>Tuple : Symbol(Tuple, Decl(inferRestArgumentsMappedTuple.ts, 12, 38))
38+
>mappedTypes : Symbol(mappedTypes, Decl(inferRestArgumentsMappedTuple.ts, 12, 59))
39+
>TupleMapperOld : Symbol(TupleMapperOld, Decl(inferRestArgumentsMappedTuple.ts, 2, 2))
40+
>Tuple : Symbol(Tuple, Decl(inferRestArgumentsMappedTuple.ts, 12, 38))
41+
>Tuple : Symbol(Tuple, Decl(inferRestArgumentsMappedTuple.ts, 12, 38))
42+
43+
// [string, number]
44+
const myPrimitiveTupleOld: [string, number] = extractPrimitivesOld({ primitive: "" }, { primitive: 0 });
45+
>myPrimitiveTupleOld : Symbol(myPrimitiveTupleOld, Decl(inferRestArgumentsMappedTuple.ts, 15, 5))
46+
>extractPrimitivesOld : Symbol(extractPrimitivesOld, Decl(inferRestArgumentsMappedTuple.ts, 9, 57))
47+
>primitive : Symbol(primitive, Decl(inferRestArgumentsMappedTuple.ts, 15, 68))
48+
>primitive : Symbol(primitive, Decl(inferRestArgumentsMappedTuple.ts, 15, 87))
49+
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
=== tests/cases/compiler/inferRestArgumentsMappedTuple.ts ===
2+
type MyMappedType<Primitive extends any> = {
3+
>MyMappedType : MyMappedType<Primitive>
4+
5+
primitive: Primitive;
6+
>primitive : Primitive
7+
8+
};
9+
10+
type TupleMapperOld<Tuple extends any[]> = {
11+
>TupleMapperOld : TupleMapperOld<Tuple>
12+
13+
[Key in keyof Tuple]: Tuple[Key] extends Tuple[number] ? MyMappedType<Tuple[Key]> : never;
14+
};
15+
16+
// [MyMappedType<string>, MyMappedType<number>]
17+
type MyMappedTupleOld = TupleMapperOld<[string, number]>;
18+
>MyMappedTupleOld : [MyMappedType<string>, MyMappedType<number>]
19+
20+
// ^?
21+
22+
declare function extractPrimitivesOld<Tuple extends any[]>(...mappedTypes: TupleMapperOld<Tuple>): Tuple;
23+
>extractPrimitivesOld : <Tuple extends any[]>(...mappedTypes: TupleMapperOld<Tuple>) => Tuple
24+
>mappedTypes : TupleMapperOld<Tuple>
25+
26+
// [string, number]
27+
const myPrimitiveTupleOld: [string, number] = extractPrimitivesOld({ primitive: "" }, { primitive: 0 });
28+
>myPrimitiveTupleOld : [string, number]
29+
>extractPrimitivesOld({ primitive: "" }, { primitive: 0 }) : [unknown, unknown]
30+
>extractPrimitivesOld : <Tuple extends any[]>(...mappedTypes: TupleMapperOld<Tuple>) => Tuple
31+
>{ primitive: "" } : { primitive: string; }
32+
>primitive : string
33+
>"" : ""
34+
>{ primitive: 0 } : { primitive: number; }
35+
>primitive : number
36+
>0 : 0
37+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// @strict: true
2+
3+
type MyMappedType<Primitive extends any> = {
4+
primitive: Primitive;
5+
};
6+
7+
type TupleMapperOld<Tuple extends any[]> = {
8+
[Key in keyof Tuple]: Tuple[Key] extends Tuple[number] ? MyMappedType<Tuple[Key]> : never;
9+
};
10+
11+
// [MyMappedType<string>, MyMappedType<number>]
12+
type MyMappedTupleOld = TupleMapperOld<[string, number]>;
13+
// ^?
14+
15+
declare function extractPrimitivesOld<Tuple extends any[]>(...mappedTypes: TupleMapperOld<Tuple>): Tuple;
16+
17+
// [string, number]
18+
const myPrimitiveTupleOld: [string, number] = extractPrimitivesOld({ primitive: "" }, { primitive: 0 });

0 commit comments

Comments
 (0)