microsoft / microsoft/TypeScript
strange interaction with `resolveJsonModule`, `createRequire`, naming it `require`, and requiring JSON
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.3k
- Merge medio
- 2 d 4 h
- PR fusionados (30 d)
- 132
Descripción
### 🔎 Search Terms
esm resolveJsonModule
### 🕗 Version & Regression Information
This isn't reproducible in the playground because the TSConfig editor, unlike in reality, doesn't allow you to configure `resolveJsonModule` when module is NodeNext.
### ⏯ Playground Link
n/a
### 💻 Code
Here's my config:
```
{
"extends": "@ljharb/tsconfig", // this sets resolveJsonModule to true
"compilerOptions": {
"target": "ESNext",
"module": "NodeNext",
"moduleResolution": "NodeNext",
},
"exclude": [
"coverage",
],
}
```
`@ljharb/tsconfig` sets `resolveJsonModule` to `true`.
Here's my code:
```
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
require('./package.json');
```
### 🙁 Actual behavior
When `resolveJsonModule` is locally omitted or set to `true`, I get `error TS6133: 'require' is declared but its value is never read.` on the `const require =` declaration.
When it's locally set to `false`, I get that error AND `error TS2732: Cannot find module '../package.json'. Consider using '--resolveJsonModule' to import module with '.json' extension.` on the `require()` call.
However, when I rename it from `require` to literally anything else, the errors disappear for all three config variations.
### 🙂 Expected behavior
I should be able to name a variable `require` in an ES Module without it having any implied semantics, since `require` only exists by default in CJS.
### Additional information about the issue
_No response_
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con la configuración de NodeNext proporcionada y el código que usa createRequire(import.meta.url), y reproduce los diagnósticos omitiendo, habilitando y deshabilitando resolveJsonModule. Compara esos resultados con los del mismo código después de cambiar el nombre de la variable require local; se considera terminado cuando el nombre de la variable ya no cambia los diagnósticos de variable no utilizada ni de módulo JSON en un módulo ES.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- typescript
- Área
- compilers
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Activo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 48/100