All posts
typescriptarchitectureclean-architecture

Clean Architecture in TypeScript: A Pragmatic Take

Quang Tran D.'s avatarQuang Tran D.

Clean Architecture promises testable, maintainable code by separating concerns into layers. This article shares a pragmatic implementation in TypeScript: domain models as classes, use cases with Input/Output types, repositories as interfaces, and DI via Inversify. We discuss when the overhead is justified versus when simpler patterns suffice. The article includes a complete working example showing handler, use-case, domain, and infrastructure layers, and explains how to enforce layer boundaries using eslint-plugin-strict-dependencies.