Skip to content

Commit 6c5383d

Browse files
committed
Fill the shorter target tuple with undefined when comparing signatures
1 parent 88027d5 commit 6c5383d

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

src/compiler/checker.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -19393,9 +19393,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1939319393

1939419394
for (let i = 0; i < getTypeReferenceArity(sourceType); i++) {
1939519395
elementTypes.push(
19396-
t.target.elementFlags[i] & ElementFlags.Required
19397-
? typeArguments[i]
19398-
: getElementTypeOfSliceOfTupleType(t, i)!
19396+
i < typeArguments.length
19397+
? t.target.elementFlags[i] & ElementFlags.Required
19398+
? typeArguments[i]
19399+
: getElementTypeOfSliceOfTupleType(t, i)!
19400+
: undefinedType
1939919401
);
1940019402
}
1940119403

tests/baselines/reference/genericRestParameters3.errors.txt

+8-6
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@ tests/cases/conformance/types/rest/genericRestParameters3.ts(23,1): error TS2322
1111
Type 'number' is not assignable to type 'string'.
1212
tests/cases/conformance/types/rest/genericRestParameters3.ts(24,1): error TS2322: Type '(x: string, y: number, z: boolean) => void' is not assignable to type '(x: string, ...args: [string] | [number, boolean]) => void'.
1313
Types of parameters 'y' and 'args' are incompatible.
14-
Type '[string] | [number, boolean]' is not assignable to type '[y: number, z: boolean]'.
15-
Type '[string]' is not assignable to type '[y: number, z: boolean]'.
16-
Source has 1 element(s) but target requires 2.
14+
Type '[number, boolean] | [string, undefined]' is not assignable to type '[y: number, z: boolean]'.
15+
Type '[string, undefined]' is not assignable to type '[y: number, z: boolean]'.
16+
Type at position 0 in source is not compatible with type at position 0 in target.
17+
Type 'string' is not assignable to type 'number'.
1718
tests/cases/conformance/types/rest/genericRestParameters3.ts(35,1): error TS2554: Expected 1 arguments, but got 0.
1819
tests/cases/conformance/types/rest/genericRestParameters3.ts(36,21): error TS2345: Argument of type 'number' is not assignable to parameter of type '(...args: CoolArray<any>) => void'.
1920
tests/cases/conformance/types/rest/genericRestParameters3.ts(37,21): error TS2345: Argument of type '<T extends any[]>(cb: (...args: T) => void) => void' is not assignable to parameter of type '(...args: CoolArray<any>) => void'.
@@ -76,9 +77,10 @@ tests/cases/conformance/types/rest/genericRestParameters3.ts(59,5): error TS2345
7677
~~
7778
!!! error TS2322: Type '(x: string, y: number, z: boolean) => void' is not assignable to type '(x: string, ...args: [string] | [number, boolean]) => void'.
7879
!!! error TS2322: Types of parameters 'y' and 'args' are incompatible.
79-
!!! error TS2322: Type '[string] | [number, boolean]' is not assignable to type '[y: number, z: boolean]'.
80-
!!! error TS2322: Type '[string]' is not assignable to type '[y: number, z: boolean]'.
81-
!!! error TS2322: Source has 1 element(s) but target requires 2.
80+
!!! error TS2322: Type '[number, boolean] | [string, undefined]' is not assignable to type '[y: number, z: boolean]'.
81+
!!! error TS2322: Type '[string, undefined]' is not assignable to type '[y: number, z: boolean]'.
82+
!!! error TS2322: Type at position 0 in source is not compatible with type at position 0 in target.
83+
!!! error TS2322: Type 'string' is not assignable to type 'number'.
8284
f1 = f4;
8385

8486
// Repro from #26110

0 commit comments

Comments
 (0)