microsoft / microsoft/TypeScript
tsc not respecting types/typeRoots config for imported modules
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.3k
- Merge medio
- 1g 19h
- PR unite (30g)
- 117
Descrizione
Bug Report
Codebase is pulling in type declarations from the parent ../node_modules/@types/ folder, despite attempting to restrict the types and typeRoots to ignore it.
client/
node_modules/@types/foo/ # server shouldn't ever see this!
tsconfig.json
server/
node_modules/foo/ # server should see this as a module with no type declarations
tsconfig.json
🔎 Search Terms
- Stop typescript from including types from parent node_modules
- Prevent typeRoots from using parent node_modules
Related Issues:
- How to block typescript 2.0 from walking up all parent directories while resolving modules? #13992
- Declarations are unexpectedly used from node_modules in parent directory #30124
The issue is very similar to the ones described above, but neither were resolved beyond saying that unwanted types could be excluded with "types": []. This only seems to work for excluding global types (e.g. @types/node) as far as I can tell, there is no way to prevent typescript pulling in types for a module that is explicitly imported. See repro for more context.
🕗 Version & Regression Information
We are seeing this problem with typescript@3.9.9, but I have created a reproduction that also confirms it on typescript@latest and typescript@next too.
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about excluding types and type roots.
💻 Code
Reproduced in repo with CI demonstrating incorrect behaviour here: https://github.com/danprince/typeroots-bug-repro
🙁 Actual behavior
The server codebase ends up including ../node_modules/@types/foo/index.d.ts as part of the compilation (through an import foo from "foo") even with "typeRoots": ["./node_modules/@types"] and "types": [].
Our current workaround is to remove the parent node_modules as part of our CI step.
We could also work around this by shadowing the declarations in the local node_modules/@types dir, or using paths hack to point typescript towards a non-existent version of the module, but it shouldn't be that hard.
All I want is to tell tsc is to never ever look in ../node_modules/@types.
🙂 Expected behavior
Never look in ../node_modules/@types for anything. I know that conflicts with the "moduleResolution": "node" to some degree, but it should be possible to configure that as far as type declarations are concerned.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con il typeroots-bug-repro collegato e i relativi file tsconfig.json del server e del client, quindi esegui la compilazione tsc segnalata per osservare la risoluzione di parent node_modules/@types. Traccia il modo in cui moduleResolution interagisce con typeRoots, types e un import esplicito di foo. Il lavoro è completato quando una configurazione supportata impedisce la selezione delle dichiarazioni del parent, preservando al contempo il comportamento previsto della risoluzione dei moduli.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript
- Ambito
- compilers
- Tipo di issue
- Bug
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 25/100