diff --git a/crates/oxc_semantic/src/checker/javascript.rs b/crates/oxc_semantic/src/checker/javascript.rs index f083938641765..3b17653d42767 100644 --- a/crates/oxc_semantic/src/checker/javascript.rs +++ b/crates/oxc_semantic/src/checker/javascript.rs @@ -117,6 +117,7 @@ pub fn check_binding_identifier(ident: &BindingIdentifier, ctx: &SemanticBuilder // declare function f(...eval): number; // OK // declare function f(...arguments): number; // OK // type K = (arguments: any[]) => void; // OK + // interface Foo { bar(arguments: any[]): void; } // OK // declare function g({eval, arguments}: {eval: number, arguments: number}): number; // Error // declare function h([eval, arguments]: [number, number]): number; // Error let is_declare_function = |kind: &AstKind| { @@ -129,11 +130,9 @@ pub fn check_binding_identifier(ident: &BindingIdentifier, ctx: &SemanticBuilder AstKind::Function(func) => matches!(func.r#type, FunctionType::TSDeclareFunction), AstKind::FormalParameter(_) => { is_declare_function(&ctx.nodes.parent_kind(parent.id())) - || ctx - .nodes - .ancestor_kinds(parent.id()) - .nth(1) - .is_some_and(|node| matches!(node, AstKind::TSFunctionType(_))) + || ctx.nodes.ancestor_kinds(parent.id()).nth(1).is_some_and(|node| { + matches!(node, AstKind::TSFunctionType(_) | AstKind::TSMethodSignature(_)) + }) } AstKind::BindingRestElement(_) => { let grand_parent = ctx.nodes.parent_node(parent.id()); diff --git a/tasks/coverage/misc/pass/arguments-eval.d.ts b/tasks/coverage/misc/pass/arguments-eval.d.ts index 59eb0446e0806..97cb76dc8b64c 100644 --- a/tasks/coverage/misc/pass/arguments-eval.d.ts +++ b/tasks/coverage/misc/pass/arguments-eval.d.ts @@ -1 +1,5 @@ type K = (arguments: any[]) => void; + +interface Foo { + bar(arguments: any[]): void; +}