TypeScript Configuration
The project uses a centralized TypeScript configuration intsconfig.base.json that is extended by individual packages.
Compiler Options
Type Checking
strict: false- Strict mode is disabled at the base levelnoImplicitAny: true- Must explicitly type variables (no implicitany)- Uses
typescript-strict-pluginfor gradual strict mode adoption per file
Module Configuration
- Target: ES2016 for broad compatibility
- Module: ES2020 for modern module features
- Lib: Includes ESNext.Disposable for resource management
Decorator Support
Path Mappings
The project uses extensive path mappings to enable clean imports across the monorepo:@bitwarden/common/*- Core shared logic@bitwarden/angular/*- Angular-specific utilities@bitwarden/auth/*- Authentication modules@bitwarden/components- Component library@bitwarden/vault- Vault-specific code@bitwarden/platform- Platform abstractions- And many more (see
tsconfig.base.json:20-74for full list)
Build Configuration
TypeScript Patterns
Explicit Types
Required: Always specify types for function parameters and return values.Avoid any
While @typescript-eslint/no-explicit-any is currently disabled, avoid using any types.
Member Accessibility
Per ESLint rules (@typescript-eslint/explicit-member-accessibility), omit public keyword:
Promises
Always await or handle promises (@typescript-eslint/no-floating-promises):
Unused Variables
Function arguments named_ or unused are allowed (@typescript-eslint/no-unused-vars):
Gradual Strict Mode
The project usestypescript-strict-plugin to enable strict mode on a per-file basis:
Import Best Practices
Use Path Mappings
Always prefer@bitwarden/* imports over relative paths:
Alphabetize Imports
Imports are automatically organized by ESLint (import/order):
- Built-in/external packages (alphabetically)
@bitwarden/*packages (alphabetically)src/relative imports (alphabetically)- Blank lines between groups
Type Safety Tools
Running Type Checks
ESLint Type-Aware Rules
Many ESLint rules require type information and usetsconfig.eslint.json:
@typescript-eslint/no-floating-promises@typescript-eslint/no-misused-promises- Type-aware import resolution
Common Patterns
Ternary Expressions
Ternary expressions in statements are allowed (@typescript-eslint/no-unused-expressions):
This Aliasing
Onlyself is allowed as an alias for this (@typescript-eslint/no-this-alias):
Next Steps
- Review Angular Patterns for Angular-specific TypeScript patterns
- See Linting for ESLint configuration and rules