Skip to content

ConfigurableModuleCls

reference
1 min readUpdated

Kind: Type

Source: packages/common/module-utils/interfaces/configurable-module-cls.interface.ts

Part of: Common

Class that represents a blueprint/prototype for a configurable Nest module. This class provides static methods for constructing dynamic modules. Their names can be controlled through the "MethodKey" type argument.

ConfigurableModuleCls describes the class produced by Nest’s configurable module utilities. It defines the static registration methods that create DynamicModule definitions, including custom method names such as forRoot and forRootAsync.

Definition

ts
{ new (): any; } & Record< `${MethodKey}`, ( options: ModuleOptions & Partial<ExtraModuleDefinitionOptions>, ) => DynamicModule > & Record< `${MethodKey}Async`, ( options: ConfigurableModuleAsyncOptions< ModuleOptions, FactoryClassMethodKey > & Partial<ExtraModuleDefinitionOptions>, ) => DynamicModule >

Diagram

mermaid
graph LR
  Builder[ConfigurableModuleBuilder] --> GeneratedClass[ConfigurableModuleCls]
  GeneratedClass --> SyncMethod[forRoot / register]
  GeneratedClass --> AsyncMethod[forRootAsync / registerAsync]
  SyncMethod --> DynamicModule[DynamicModule]
  AsyncMethod --> DynamicModule
  DynamicModule --> NestApp[Nest application imports]

Usage

ts
import { Module } from '@nestjs/common';
import {
  ConfigurableModuleBuilder,
  ConfigurableModuleCls,
} from '@nestjs/common';

interface CacheModuleOptions {
  ttl: number;
  prefix?: string;
}

const { ConfigurableModuleClass } =
  new ConfigurableModuleBuilder<CacheModuleOptions>()
    .setClassMethodName('forRoot')
    .build();

export class CacheModule extends ConfigurableModuleClass {}

const CacheConfigurableModule: ConfigurableModuleCls<
  CacheModuleOptions,
  'forRoot'
> = CacheModule;

@Module({
  imports: [
    CacheConfigurableModule.forRoot({
      ttl: 60,
      prefix: 'app:',
    }),
  ],
})
export class AppModule {}

AI Coding Instructions

  • Use ConfigurableModuleCls when a helper, factory, or abstraction needs to accept a generated configurable module class.
  • Keep the MethodKey generic aligned with the method configured through setClassMethodName(), such as 'forRoot'.
  • Prefer extending the generated ConfigurableModuleClass when defining the public Nest module class.
  • Use the generated synchronous or asynchronous registration method in a module’s imports array, since each call returns a DynamicModule.
  • Do not instantiate configurable module classes directly; use their static registration methods instead.

Was this page helpful?

Download as PDF
ConfigurableModuleCls — NestJS head-to-head