Skip to content

Commit e821c2b

Browse files
author
Andy
authored
A parameter not declared as a rest parameter is not one (microsoft#18825)
1 parent 71f8852 commit e821c2b

File tree

4 files changed

+8
-22
lines changed

4 files changed

+8
-22
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20298,7 +20298,7 @@ namespace ts {
2029820298

2029920299
function checkCollisionWithArgumentsInGeneratedCode(node: SignatureDeclaration) {
2030020300
// no rest parameters \ declaration context \ overload - no codegen impact
20301-
if (!hasDeclaredRestParameter(node) || isInAmbientContext(node) || nodeIsMissing((<FunctionLikeDeclaration>node).body)) {
20301+
if (!hasRestParameter(node) || isInAmbientContext(node) || nodeIsMissing((<FunctionLikeDeclaration>node).body)) {
2030220302
return;
2030320303
}
2030420304

src/compiler/utilities.ts

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1604,26 +1604,12 @@ namespace ts {
16041604
}
16051605

16061606
export function hasRestParameter(s: SignatureDeclaration): boolean {
1607-
return isRestParameter(lastOrUndefined(s.parameters));
1607+
const last = lastOrUndefined(s.parameters);
1608+
return last && isRestParameter(last);
16081609
}
16091610

1610-
export function hasDeclaredRestParameter(s: SignatureDeclaration): boolean {
1611-
return isDeclaredRestParam(lastOrUndefined(s.parameters));
1612-
}
1613-
1614-
export function isRestParameter(node: ParameterDeclaration) {
1615-
if (isInJavaScriptFile(node)) {
1616-
if (node.type && node.type.kind === SyntaxKind.JSDocVariadicType ||
1617-
forEach(getJSDocParameterTags(node),
1618-
t => t.typeExpression && t.typeExpression.type.kind === SyntaxKind.JSDocVariadicType)) {
1619-
return true;
1620-
}
1621-
}
1622-
return isDeclaredRestParam(node);
1623-
}
1624-
1625-
export function isDeclaredRestParam(node: ParameterDeclaration) {
1626-
return node && node.dotDotDotToken !== undefined;
1611+
export function isRestParameter(node: ParameterDeclaration): boolean {
1612+
return node.dotDotDotToken !== undefined;
16271613
}
16281614

16291615
export const enum AssignmentKind {

tests/baselines/reference/jsFileCompilationRestParamJsDocFunction.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* @returns {*} Returns the result of `func`.
1111
*/
1212
function apply(func, thisArg, args) {
13-
>apply : (func: Function, thisArg: any, ...args: any[]) => any
13+
>apply : (func: Function, thisArg: any, args: any[]) => any
1414
>func : Function
1515
>thisArg : any
1616
>args : any[]
@@ -84,5 +84,5 @@ function apply(func, thisArg, args) {
8484
}
8585

8686
export default apply;
87-
>apply : (func: Function, thisArg: any, ...args: any[]) => any
87+
>apply : (func: Function, thisArg: any, args: any[]) => any
8888

tests/baselines/reference/jsdocPrefixPostfixParsing.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* @param {...number?[]!} k - (number[] | null)[]
1717
*/
1818
function f(x, y, z, a, b, c, d, e, f, g, h, i, j, k) {
19-
>f : (x: number[], y: number[], z: number[], a: (number | null)[], b: number[] | null, c: number[] | null, d: number[] | null, ...e: (number | null)[], f: number[] | null, g: number[] | null, h: number[] | null, i: number[][], j: number[][] | null, k: (number[] | null)[]) => void
19+
>f : (x: number[], y: number[], z: number[], a: (number | null)[], b: number[] | null, c: number[] | null, d: number[] | null, e: (number | null)[], f: number[] | null, g: number[] | null, h: number[] | null, i: number[][], j: number[][] | null, k: (number[] | null)[]) => void
2020
>x : number[]
2121
>y : number[]
2222
>z : number[]

0 commit comments

Comments
 (0)