microsoft / TypeScript

TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
https://www.typescriptlang.org
Apache License 2.0
100.94k stars 12.47k forks source link

Ability to extend compilerOptions's paths config #44589

Open xiejay97 opened 3 years ago

xiejay97 commented 3 years ago

Suggestion

I have a tsconfig.base.json file for the monorepo, it defined paths that all project can use

{
  "compileOnSave": false,
  "compilerOptions": {
"paths": {
  "@aegis/ui": ["libs/ui/src/index.ts"],
  "@aegis/ui/*": ["libs/ui/src/*"],
  "@aegis/shared": ["libs/shared/src/index.ts"],
  "@aegis/shared/*": ["libs/shared/src/*"]
}

}, "exclude": ["node_modules", "tmp"] }


Each project has own `tsconfig.json`, also defined paths  that only for itself

{ "extends": "../../tsconfig.base.json", "compilerOptions": { "paths": { "@environment": ["src/environments/environment.ts"] } }, "files": [], "include": [], "references": [ { "path": "./tsconfig.app.json" }, { "path": "./tsconfig.spec.json" }, { "path": "./tsconfig.editor.json" } ] }



Unfortunately, the `paths` would be overwritten.

I have to add `tsconfig.base.json` paths item to each project.

So, it's necessary to provide a solution for this case.

## 🔍 Search Terms

<!--
  💡 Did you know? TypeScript has over 2,000 open suggestions!
  🔎 Please search thoroughly before logging new feature requests as most common ideas already have a proposal in progress.
  The "Common Feature Requests" section of the FAQ lists many popular requests: https://github.com/Microsoft/TypeScript/wiki/FAQ#common-feature-requests

  Replace the text below:
-->

- compilerOptions paths extends label:Suggestion

List of keywords you searched for before creating this issue. Write them down here so that others can find this suggestion more easily and help provide feedback.
WORMSS commented 3 years ago

There are a number of times something like "pathsAppend": [], "libsAppend": [], "referencesAppend": [], "includesAppend": [] Where we want to ADD to what ever the default/extended options are, rather than replace/override.

Libs being the most annoying even in 'standard' circumstances without extending another tsconfig, but the fact that 'adding' a single lib, REMOVES ALL the default ones added by the "target" setting. And you can't even get a definitive list of what those libs were..

ArZargaryan commented 1 year ago

@xiejay97 Hi. Did you find a solution or workaround?

xiejay97 commented 1 year ago

@xiejay97 Hi. Did you find a solution or workaround?

@ArZargaryan There is no solution for me yet 😹

gluharry commented 1 year ago

+1 This is something very important, what is a workaround for this?

toantd90 commented 1 year ago

+1. That would be helpful if we could extend the paths configuration.

jugglingcats commented 1 year ago

It seems to me that since the paths are name/value, a simple merge should work, eg:

const new_paths={...basePaths, ...localPaths}

The semantics seem quite clear - use the paths in the base config (with resolution relative to that tsconfig file), and merge/overwrite any local ones (relative to the local tsconfig file).

pmayur commented 1 year ago

It seems to me that since the paths are name/value, a simple merge should work, eg:

const new_paths={...basePaths, ...localPaths}

@jugglingcats where should these be made?

JorritKeijzer commented 1 year ago

+1 Would really fix stuff in big monorepos

beautyfree commented 12 months ago

same question

kosiakMD commented 11 months ago

+1 same issue! NX + Remix + NestJS - need local and common paths

IARI commented 11 months ago

I am baffled that this really is not possible.

dannyfranca commented 11 months ago

+1 2023, and it is not still possible.

ericlee33 commented 9 months ago

+1 2024.02

dben89x commented 8 months ago

Seems this issue was addressed and closed back in 2017 on #14527 due to the suggestion being "more confusing since paths are order dependent and the paths are relative to the baseUrl, and there are two in this case". Which strikes me as an obnoxiously arrogant and dismissive take. Especially considering this can easily be resolved by simply either appending or prepending the base config, and scoping the new paths to either the current config's baseUrl or the base's baseUrl. And considering the increasing need for composite configs with monorepos, this is no longer an edge case (if you could ever argue it was one). Seems like an anti-pattern to suggest we just repeat ourselves in multiple configs.

dannyfranca commented 8 months ago

Folks, there has been an ongoing proposal since November 2023. Let's contribute to the discussion to help get it going: https://github.com/microsoft/TypeScript/issues/56436