Skip to content

Commit 8636adb

Browse files
authored
fix(49449): change error location when passing objects/arrays to an argument of type (#49593)
1 parent 71b5bdf commit 8636adb

File tree

6 files changed

+65
-2
lines changed

6 files changed

+65
-2
lines changed

src/compiler/checker.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17840,7 +17840,7 @@ namespace ts {
1784017840
containingMessageChain: (() => DiagnosticMessageChain | undefined) | undefined,
1784117841
errorOutputContainer: { errors?: Diagnostic[], skipLogging?: boolean } | undefined
1784217842
) {
17843-
if (target.flags & TypeFlags.Primitive) return false;
17843+
if (target.flags & (TypeFlags.Primitive | TypeFlags.Never)) return false;
1784417844
if (isTupleLikeType(source)) {
1784517845
return elaborateElementwise(generateLimitedTupleElements(node, target), source, target, relation, containingMessageChain, errorOutputContainer);
1784617846
}
@@ -17893,7 +17893,7 @@ namespace ts {
1789317893
containingMessageChain: (() => DiagnosticMessageChain | undefined) | undefined,
1789417894
errorOutputContainer: { errors?: Diagnostic[], skipLogging?: boolean } | undefined
1789517895
) {
17896-
if (target.flags & TypeFlags.Primitive) return false;
17896+
if (target.flags & (TypeFlags.Primitive | TypeFlags.Never)) return false;
1789717897
return elaborateElementwise(generateObjectLiteralElements(node), source, target, relation, containingMessageChain, errorOutputContainer);
1789817898
}
1789917899

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
tests/cases/compiler/assignmentCompatability46.ts(3,4): error TS2345: Argument of type 'number[]' is not assignable to parameter of type 'never'.
2+
tests/cases/compiler/assignmentCompatability46.ts(4,4): error TS2345: Argument of type '{ a: number; b: number; }' is not assignable to parameter of type 'never'.
3+
4+
5+
==== tests/cases/compiler/assignmentCompatability46.ts (2 errors) ====
6+
declare function fn(x: never): void;
7+
8+
fn([1, 2, 3])
9+
~~~~~~~~~
10+
!!! error TS2345: Argument of type 'number[]' is not assignable to parameter of type 'never'.
11+
fn({ a: 1, b: 2 })
12+
~~~~~~~~~~~~~~
13+
!!! error TS2345: Argument of type '{ a: number; b: number; }' is not assignable to parameter of type 'never'.
14+
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//// [assignmentCompatability46.ts]
2+
declare function fn(x: never): void;
3+
4+
fn([1, 2, 3])
5+
fn({ a: 1, b: 2 })
6+
7+
8+
//// [assignmentCompatability46.js]
9+
fn([1, 2, 3]);
10+
fn({ a: 1, b: 2 });
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
=== tests/cases/compiler/assignmentCompatability46.ts ===
2+
declare function fn(x: never): void;
3+
>fn : Symbol(fn, Decl(assignmentCompatability46.ts, 0, 0))
4+
>x : Symbol(x, Decl(assignmentCompatability46.ts, 0, 20))
5+
6+
fn([1, 2, 3])
7+
>fn : Symbol(fn, Decl(assignmentCompatability46.ts, 0, 0))
8+
9+
fn({ a: 1, b: 2 })
10+
>fn : Symbol(fn, Decl(assignmentCompatability46.ts, 0, 0))
11+
>a : Symbol(a, Decl(assignmentCompatability46.ts, 3, 4))
12+
>b : Symbol(b, Decl(assignmentCompatability46.ts, 3, 10))
13+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
=== tests/cases/compiler/assignmentCompatability46.ts ===
2+
declare function fn(x: never): void;
3+
>fn : (x: never) => void
4+
>x : never
5+
6+
fn([1, 2, 3])
7+
>fn([1, 2, 3]) : void
8+
>fn : (x: never) => void
9+
>[1, 2, 3] : number[]
10+
>1 : 1
11+
>2 : 2
12+
>3 : 3
13+
14+
fn({ a: 1, b: 2 })
15+
>fn({ a: 1, b: 2 }) : void
16+
>fn : (x: never) => void
17+
>{ a: 1, b: 2 } : { a: number; b: number; }
18+
>a : number
19+
>1 : 1
20+
>b : number
21+
>2 : 2
22+
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
declare function fn(x: never): void;
2+
3+
fn([1, 2, 3])
4+
fn({ a: 1, b: 2 })

0 commit comments

Comments
 (0)