microsoft / microsoft/TypeScript
Files outside rootDir emit files adjacent to themselves if they are imported by an included file
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.4k
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 117
Description
Bug Report
The documentation for rootDir states that
Note that TypeScript will never write an output file to a directory outside of outDir, and will never skip emitting a file. For this reason, rootDir also enforces that all files which need to be emitted are underneath the rootDir path.
If any included file imports a ts file outside of rootDir, a declaration file is generated for that imported file and emitted adjacent to it. noEmitOnError needs to be either omitted or set to false, or the -b flag needs to be specified for this to occur.
🔎 Search Terms
noEmitOnError, unwanted declaration files, emits outside outDir, emits outside declarationDir
🕗 Version & Regression Information
On all versions matching ^4.2.4 and on the current nightly, nonexhaustive, haven't checked others
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about tsconfig.json behaviour and commandline behaviour
⏯ Playground Link
https://github.com/gtm-nayan/ts-no-emit-wat/
Sorry, couldn't figure out multiple files in the playground or the workbench.
💻 Code
🙁 Actual behavior
Declaration files emitted outside of output directory.
🙂 Expected behavior
No files should be emitted outside of the specified output directory.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the behavior in the linked repository, focusing on a file outside rootDir that is imported by an included file and the resulting declaration emit. Then trace the TypeScript compiler's rootDir, outDir, declarationDir, and noEmitOnError handling; done means no declaration files are emitted outside the configured output directory.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100