Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Class names `eval` and `arguments` are not reported as invalid strict mode bindings

Abierto Apto para principiantes
#64,661 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@dmety ya está trabajando en esto.

Desde el 7/10/2026.

  • #64682 de @dmety — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
68/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
typescript
Área
compilers

Línea de trabajo

Empieza en el binder, en bindClassLikeDeclaration, y compara sus comprobaciones del modo estricto con checkStrictModeFunctionName; el issue identifica la comprobación que falta y la condición del contexto ambient. Encuentra las pruebas de regresión del binder y cubre las declaraciones de clase, las expresiones de clase y los archivos .js con checkJs. Se considerará terminado cuando los nombres de clase eval y arguments generen el diagnóstico esperado del modo estricto sin cambiar los casos válidos.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Bug
Acknowledgement
  • I acknowledge that issues using this template may be closed without further explanation at the maintainer's discretion.
Comment
🔎 Search Terms

class name eval arguments, class arguments strict mode, TS1210 class name, TS1215 class declaration, checkStrictModeEvalOrArguments class

🕗 Version & Regression Information
  • This is the behavior in every version I tried (4.0.8, 5.0.4, 6.0.2, 7.1.0-dev.20261006.1), and I reviewed the FAQ for entries about strict mode and reserved words
⏯ Playground Link

https://www.typescriptlang.org/play/?ts=6.0.0-dev.20260416#code/MYGwhgzhAEYE4HMCuBbApgOwC4wN4F9ojiiB6U6DAe2jTjirgBpaAPABzWCzQBNoAKgGUAjACYRABgBQoSDDQA3MCGgESGkuUo06DZm07c+g0RJnAqGCFmgBhaAF5ocqLWWqCAbjIVqtekYWNA4uHn5hcSlpXi5wODQXcDclFTVCbX89IMMwk0jzaWltADFGFyoUdngASwgrFhVVKiwACzpoGzga7gBaFCpY6AAjGoxeMYQYeESE9kZwgC5pADMkDG4aq2gVgAoASjVpIlcYABE1aBRd+GR0bAhFylRhukP1DIoC6PxpEPm4LZvNIgA

💻 Code
class arguments {}        // no error, expected TS1210
class eval {}             // no error, expected TS1210
const C = class eval {};  // no error, expected TS1210
declare class eval {} // no error, expected TS1210

// For comparison, all other strict-mode bindings are reported:
function f() {
  class D { m(arguments: number) {} } // TS1210
}
export {};
🙁 Actual behavior

No errors are reported for the class names. The emitted JavaScript is rejected at runtime:

$ node out.js
SyntaxError: Unexpected eval or arguments in strict mode

The same happens in a .js file with checkJs enabled.

🙂 Expected behavior

Each class name eval / arguments should be reported, as other strict mode bindings already are. Per the spec, all parts of a class are strict mode code (ECMA-262 §11.2.2), and it is an early error for a BindingIdentifier in strict mode code to be eval or arguments (§13.1.1). This applies to both class declarations and class expressions.

Additional information about the issue

In the binder, function names (checkStrictModeFunctionName), variable declarations (bindVariableDeclarationOrBindingElement) and parameters (bindParameter) all call checkStrictModeEvalOrArguments. bindClassLikeDeclaration never does, so class names skip this check.

bindWorker already sets inStrictMode = true for ClassDeclaration / ClassExpression before it calls bindClassLikeDeclaration. So a fix could follow checkStrictModeFunctionName: call checkStrictModeEvalOrArguments(node, node.name) in bindClassLikeDeclaration when not in an ambient context.

Found this issue while fixing the same bug in Babel's parser: https://github.com/babel/babel/pull/18315

Lenguaje dominante
Go
Estrellas
111k
Forks
15.5k
Merge medio
1 d 21 h
PR fusionados (30 d)
150

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de microsoft/TypeScript

Todos los issues de microsoft/TypeScript

Issues similares

Más issues de Go

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.