microsoft / microsoft/TypeScript

strange interaction with `resolveJsonModule`, `createRequire`, naming it `require`, and requiring JSON

Aperta
#61,292 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Bug Domain: Node ESM Help Wanted Needs Human Review Needs More Info
Lingua principale
Go
Stelle
111k
Fork
14.3k
Merge medio
2g 4h
PR unite (30g)
132

Descrizione

🔎 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

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia con la configurazione NodeNext fornita e il codice che usa createRequire(import.meta.url), quindi riproduci le diagnostica omettendo, abilitando e disabilitando resolveJsonModule. Confronta questi risultati con quelli dello stesso codice dopo aver rinominato la variabile require locale; il lavoro è completato quando il nome della variabile non modifica più i diagnostica relativi a variabili non utilizzate o moduli JSON in un modulo ES.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
typescript
Ambito
compilers
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Attiva
Chiarezza
Abbastanza chiara
Idoneità per principianti
48/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.