Skip to content

Commit 718b3d4

Browse files
committed
Add regression test
1 parent 18351a5 commit 718b3d4

File tree

5 files changed

+119
-0
lines changed

5 files changed

+119
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
tests/cases/compiler/inferenceFromIncompleteSource.ts(11,11): error TS2345: Argument of type '{ items: { name: string; }[]; itemKey: "name"; }' is not assignable to parameter of type 'ListProps<{ name: string; }, "name">'.
2+
Property 'prop' is missing in type '{ items: { name: string; }[]; itemKey: "name"; }' but required in type 'ListProps<{ name: string; }, "name">'.
3+
4+
5+
==== tests/cases/compiler/inferenceFromIncompleteSource.ts (1 errors) ====
6+
// Repro from #42030
7+
8+
interface ListProps<T, K extends keyof T> {
9+
items: T[];
10+
itemKey: K;
11+
prop: number;
12+
}
13+
14+
declare const Component: <T, K extends keyof T>(x: ListProps<T, K>) => void;
15+
16+
Component({items: [{name:' string'}], itemKey: 'name' });
17+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
18+
!!! error TS2345: Argument of type '{ items: { name: string; }[]; itemKey: "name"; }' is not assignable to parameter of type 'ListProps<{ name: string; }, "name">'.
19+
!!! error TS2345: Property 'prop' is missing in type '{ items: { name: string; }[]; itemKey: "name"; }' but required in type 'ListProps<{ name: string; }, "name">'.
20+
!!! related TS2728 tests/cases/compiler/inferenceFromIncompleteSource.ts:6:3: 'prop' is declared here.
21+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//// [inferenceFromIncompleteSource.ts]
2+
// Repro from #42030
3+
4+
interface ListProps<T, K extends keyof T> {
5+
items: T[];
6+
itemKey: K;
7+
prop: number;
8+
}
9+
10+
declare const Component: <T, K extends keyof T>(x: ListProps<T, K>) => void;
11+
12+
Component({items: [{name:' string'}], itemKey: 'name' });
13+
14+
15+
//// [inferenceFromIncompleteSource.js]
16+
"use strict";
17+
// Repro from #42030
18+
Component({ items: [{ name: ' string' }], itemKey: 'name' });
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
=== tests/cases/compiler/inferenceFromIncompleteSource.ts ===
2+
// Repro from #42030
3+
4+
interface ListProps<T, K extends keyof T> {
5+
>ListProps : Symbol(ListProps, Decl(inferenceFromIncompleteSource.ts, 0, 0))
6+
>T : Symbol(T, Decl(inferenceFromIncompleteSource.ts, 2, 20))
7+
>K : Symbol(K, Decl(inferenceFromIncompleteSource.ts, 2, 22))
8+
>T : Symbol(T, Decl(inferenceFromIncompleteSource.ts, 2, 20))
9+
10+
items: T[];
11+
>items : Symbol(ListProps.items, Decl(inferenceFromIncompleteSource.ts, 2, 43))
12+
>T : Symbol(T, Decl(inferenceFromIncompleteSource.ts, 2, 20))
13+
14+
itemKey: K;
15+
>itemKey : Symbol(ListProps.itemKey, Decl(inferenceFromIncompleteSource.ts, 3, 13))
16+
>K : Symbol(K, Decl(inferenceFromIncompleteSource.ts, 2, 22))
17+
18+
prop: number;
19+
>prop : Symbol(ListProps.prop, Decl(inferenceFromIncompleteSource.ts, 4, 13))
20+
}
21+
22+
declare const Component: <T, K extends keyof T>(x: ListProps<T, K>) => void;
23+
>Component : Symbol(Component, Decl(inferenceFromIncompleteSource.ts, 8, 13))
24+
>T : Symbol(T, Decl(inferenceFromIncompleteSource.ts, 8, 26))
25+
>K : Symbol(K, Decl(inferenceFromIncompleteSource.ts, 8, 28))
26+
>T : Symbol(T, Decl(inferenceFromIncompleteSource.ts, 8, 26))
27+
>x : Symbol(x, Decl(inferenceFromIncompleteSource.ts, 8, 48))
28+
>ListProps : Symbol(ListProps, Decl(inferenceFromIncompleteSource.ts, 0, 0))
29+
>T : Symbol(T, Decl(inferenceFromIncompleteSource.ts, 8, 26))
30+
>K : Symbol(K, Decl(inferenceFromIncompleteSource.ts, 8, 28))
31+
32+
Component({items: [{name:' string'}], itemKey: 'name' });
33+
>Component : Symbol(Component, Decl(inferenceFromIncompleteSource.ts, 8, 13))
34+
>items : Symbol(items, Decl(inferenceFromIncompleteSource.ts, 10, 11))
35+
>name : Symbol(name, Decl(inferenceFromIncompleteSource.ts, 10, 20))
36+
>itemKey : Symbol(itemKey, Decl(inferenceFromIncompleteSource.ts, 10, 37))
37+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
=== tests/cases/compiler/inferenceFromIncompleteSource.ts ===
2+
// Repro from #42030
3+
4+
interface ListProps<T, K extends keyof T> {
5+
items: T[];
6+
>items : T[]
7+
8+
itemKey: K;
9+
>itemKey : K
10+
11+
prop: number;
12+
>prop : number
13+
}
14+
15+
declare const Component: <T, K extends keyof T>(x: ListProps<T, K>) => void;
16+
>Component : <T, K extends keyof T>(x: ListProps<T, K>) => void
17+
>x : ListProps<T, K>
18+
19+
Component({items: [{name:' string'}], itemKey: 'name' });
20+
>Component({items: [{name:' string'}], itemKey: 'name' }) : void
21+
>Component : <T, K extends keyof T>(x: ListProps<T, K>) => void
22+
>{items: [{name:' string'}], itemKey: 'name' } : { items: { name: string; }[]; itemKey: "name"; }
23+
>items : { name: string; }[]
24+
>[{name:' string'}] : { name: string; }[]
25+
>{name:' string'} : { name: string; }
26+
>name : string
27+
>' string' : " string"
28+
>itemKey : "name"
29+
>'name' : "name"
30+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// @strict: true
2+
3+
// Repro from #42030
4+
5+
interface ListProps<T, K extends keyof T> {
6+
items: T[];
7+
itemKey: K;
8+
prop: number;
9+
}
10+
11+
declare const Component: <T, K extends keyof T>(x: ListProps<T, K>) => void;
12+
13+
Component({items: [{name:' string'}], itemKey: 'name' });

0 commit comments

Comments
 (0)