microsoft / microsoft/TypeScript

Files outside rootDir emit files adjacent to themselves if they are imported by an included file

Open
#52,889 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Docs
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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.