Skip to content

Commit c0dd832

Browse files
committed
Test:incorrect mapped type doesn't infinitely recur
1 parent f0ef9a0 commit c0dd832

6 files changed

Lines changed: 74 additions & 1 deletion
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
tests/cases/compiler/incorrectRecursiveMappedTypeConstraint.ts(2,32): error TS2322: Type 'T' is not assignable to type 'string'.
2+
Type '{ [P in T]: number; }' is not assignable to type 'string'.
3+
4+
5+
==== tests/cases/compiler/incorrectRecursiveMappedTypeConstraint.ts (1 errors) ====
6+
// #17847
7+
function sum<T extends { [P in T]: number }, K extends keyof T>(n: number, v: T, k: K) {
8+
~
9+
!!! error TS2322: Type 'T' is not assignable to type 'string'.
10+
!!! error TS2322: Type '{ [P in T]: number; }' is not assignable to type 'string'.
11+
n += v[k];
12+
}
13+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//// [incorrectRecursiveMappedTypeConstraint.ts]
2+
// #17847
3+
function sum<T extends { [P in T]: number }, K extends keyof T>(n: number, v: T, k: K) {
4+
n += v[k];
5+
}
6+
7+
8+
//// [incorrectRecursiveMappedTypeConstraint.js]
9+
// #17847
10+
function sum(n, v, k) {
11+
n += v[k];
12+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
=== tests/cases/compiler/incorrectRecursiveMappedTypeConstraint.ts ===
2+
// #17847
3+
function sum<T extends { [P in T]: number }, K extends keyof T>(n: number, v: T, k: K) {
4+
>sum : Symbol(sum, Decl(incorrectRecursiveMappedTypeConstraint.ts, 0, 0))
5+
>T : Symbol(T, Decl(incorrectRecursiveMappedTypeConstraint.ts, 1, 13))
6+
>P : Symbol(P, Decl(incorrectRecursiveMappedTypeConstraint.ts, 1, 26))
7+
>T : Symbol(T, Decl(incorrectRecursiveMappedTypeConstraint.ts, 1, 13))
8+
>K : Symbol(K, Decl(incorrectRecursiveMappedTypeConstraint.ts, 1, 44))
9+
>T : Symbol(T, Decl(incorrectRecursiveMappedTypeConstraint.ts, 1, 13))
10+
>n : Symbol(n, Decl(incorrectRecursiveMappedTypeConstraint.ts, 1, 64))
11+
>v : Symbol(v, Decl(incorrectRecursiveMappedTypeConstraint.ts, 1, 74))
12+
>T : Symbol(T, Decl(incorrectRecursiveMappedTypeConstraint.ts, 1, 13))
13+
>k : Symbol(k, Decl(incorrectRecursiveMappedTypeConstraint.ts, 1, 80))
14+
>K : Symbol(K, Decl(incorrectRecursiveMappedTypeConstraint.ts, 1, 44))
15+
16+
n += v[k];
17+
>n : Symbol(n, Decl(incorrectRecursiveMappedTypeConstraint.ts, 1, 64))
18+
>v : Symbol(v, Decl(incorrectRecursiveMappedTypeConstraint.ts, 1, 74))
19+
>k : Symbol(k, Decl(incorrectRecursiveMappedTypeConstraint.ts, 1, 80))
20+
}
21+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
=== tests/cases/compiler/incorrectRecursiveMappedTypeConstraint.ts ===
2+
// #17847
3+
function sum<T extends { [P in T]: number }, K extends keyof T>(n: number, v: T, k: K) {
4+
>sum : <T extends { [P in T]: number; }, K extends keyof T>(n: number, v: T, k: K) => void
5+
>T : T
6+
>P : P
7+
>T : T
8+
>K : K
9+
>T : T
10+
>n : number
11+
>v : T
12+
>T : T
13+
>k : K
14+
>K : K
15+
16+
n += v[k];
17+
>n += v[k] : number
18+
>n : number
19+
>v[k] : T[K]
20+
>v : T
21+
>k : K
22+
}
23+
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// #17847
2+
function sum<T extends { [P in T]: number }, K extends keyof T>(n: number, v: T, k: K) {
3+
n += v[k];
4+
}

0 commit comments

Comments
 (0)