microsoft / microsoft/TypeScript

Allow dynamic usage of `import = require` syntax

Aperta
#60,884 5 commenti 2 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Awaiting More Feedback Suggestion
Lingua principale
Go
Stelle
111k
Fork
14.3k
Merge medio
1g 19h
PR unite (30g)
117

Descrizione

🔍 Search Terms

dynamic import, require, verbatimmodulesyntax

✅ Viability Checklist
⭐ Suggestion

I propose that import = require() should be allowed anywhere a require() statement is allowed (under appropriate module settings).

function foo() {
   import foo = require('./module.js');
}
📃 Motivating Example

I've been trying to convert a commonjs project to verbatimModuleSyntax. Currently dynamic JSON imports are written as

function foo() {
   const json = await import('./foo.json');
}

which are rewritten as Promise.resolve().then(() => require('./foo.json')); by TS due to my module setting. The import() syntax currently has the advantage that TS statically analyzes and provides types for the imported JSON.

I'd like to convert the JSON import to a require() call, however, a bare require() loses static analysis. Therefore, I'd like to be able to use

function foo() {
   import json = require('./foo.json');
}

in order to have type inference and static analysis of the json file (also to have it copied to the output build).

(using a node import()-from-CJS is not available to me at this time)

💻 Use Cases
  1. What do you want to use this for? dynamic require()s with static analysis, under verbatimModuleSyntax
  2. What shortcomings exist with current approaches? No static analysis of dynamic require()s.
  3. What workarounds are you using in the meantime? Not using verbatimModuleSyntax

Somewhat relates to https://github.com/microsoft/TypeScript/issues/60598

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 esaminando l’issue correlata #60598 e la gestione attuale di import() dinamico, require() e verbatimModuleSyntax. La modifica è completa quando import = require() con ambito di funzione viene accettato con impostazioni del modulo appropriate, preservando al contempo l’analisi statica e il comportamento dell’output JSON.

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

Valutazione

Stack tecnologico
typescript
Ambito
compilers
Tipo di issue
Funzionalità
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.