I wonder if there is a way to prevent all files in a certain scope from importing any file from a different second scope. Example:
Given this project structure:
project/
├── node_modules/
├── test/
├── src/
│ ├── domain/
│ │ ├── SomeModelClass.ts
│ ├── application/
│ │ ├── SomeApplicationConcern.ts
│ ├── database/
│ │ ├── SomeRepository.ts
├── tsconfig.json
└── tslint.json
I would like to enforce at least some of these rules:
SomeApplicationConcern
can import code from anywhere.SomeRepository
can not import code from application
SomeModelClass
can not import code from neither application
nor domain
.Can it be achieved somehow using nested tsconfig.json
files?
Can it be achieved using some fancy tslint
rules?
I have no clue if anything like this is possible. I would like to get a compilation error (or tslint error, which is set to error severity in my project) if a forbidden dependency is detected.
A few ideas based on some quick online research:
good-fences
is a dedicated tool to restrict imports in a TypeScript project. You'd have to add it to your build process as a separate step.module
set to es6
(to a separate output directory if you need a different module
setting to generate the code you actually run) and then run ESLint with the no-restricted-imports
rule on the output.tsconfig.json
so that you can use only non-relative imports, and then use the no-relative-imports
rule from tslint-microsoft-contrib
. However, there was talk of deprecating no-relative-imports
.no-restricted-imports
and contribute it to tslint-eslint-rules.