From 82e69f65875474a6ddf779e941dd0ed34bdf9b06 Mon Sep 17 00:00:00 2001 From: Momo Kornher Date: Mon, 2 Feb 2026 11:11:29 +0000 Subject: [PATCH] chore: enforce consistent type imports and exports Add ESLint rules for @typescript-eslint/consistent-type-exports and @typescript-eslint/consistent-type-imports to improve code clarity and enable better tree-shaking by distinguishing type-only imports. --- .eslintrc.json | 4 +++- .projenrc.ts | 6 ++++++ src/construct.ts | 5 +++-- src/dependency.ts | 2 +- src/index.ts | 2 +- test/construct.test.ts | 3 ++- 6 files changed, 16 insertions(+), 6 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index d7887828..0ff66b25 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -209,7 +209,9 @@ "method" ] } - ] + ], + "@typescript-eslint/consistent-type-exports": "error", + "@typescript-eslint/consistent-type-imports": "error" }, "overrides": [ { diff --git a/.projenrc.ts b/.projenrc.ts index d822fd4c..36de130c 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -78,4 +78,10 @@ project.npmignore?.exclude('/scripts/', '.projenrc.ts'); // cdklabs-projen-project-types is overzealous about adding this dependency project.deps.removeDependency('constructs'); +// modern type imports/exports +project.eslint?.addRules({ + '@typescript-eslint/consistent-type-exports': 'error', + '@typescript-eslint/consistent-type-imports': 'error', +}); + project.synth(); diff --git a/src/construct.ts b/src/construct.ts index b2a3f579..d0d14e34 100644 --- a/src/construct.ts +++ b/src/construct.ts @@ -1,5 +1,6 @@ -import { Dependable, IDependable } from './dependency'; -import { MetadataEntry } from './metadata'; +import type { IDependable } from './dependency'; +import { Dependable } from './dependency'; +import type { MetadataEntry } from './metadata'; import { captureStackTrace } from './private/stack-trace'; import { addressOf } from './private/uniqueid'; diff --git a/src/dependency.ts b/src/dependency.ts index 6046031f..5a2de256 100644 --- a/src/dependency.ts +++ b/src/dependency.ts @@ -1,4 +1,4 @@ -import { IConstruct } from './construct'; +import type { IConstruct } from './construct'; /** * Trait marker for classes that can be depended upon diff --git a/src/index.ts b/src/index.ts index a775761d..06c09a8d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,3 @@ export * from './construct'; -export * from './metadata'; +export type * from './metadata'; export * from './dependency'; \ No newline at end of file diff --git a/test/construct.test.ts b/test/construct.test.ts index 5da39baa..f0502cf4 100644 --- a/test/construct.test.ts +++ b/test/construct.test.ts @@ -1,5 +1,6 @@ import { App as Root } from './util'; -import { Construct, ConstructOrder, DependencyGroup, Dependable, IConstruct } from '../src'; +import type { IConstruct } from '../src'; +import { Construct, ConstructOrder, DependencyGroup, Dependable } from '../src'; // tslint:disable:variable-name // tslint:disable:max-line-length