С помощью Nest JS вам необходимо предоставить аргументы конструктора через providers
. Nest обычно использует classes
, чтобы знать, с каким токеном инъекции работать, поскольку классы сохраняются как в Typescript, так и в JavaScript. Однако вы можете использовать декоратор @Inject()
со своим собственным токеном инъекции и пользовательским значением, чтобы гарантировать, что Nest внедрит значение правильно. Это будет выглядеть примерно так:
@Module({
providers: [
MyService,
{
provide: 'MyToken', // this can be a symbol or a string
useValue: 'val2',
}
AppService,
],
})
export class AppModule {}
export type MyType = 'val1' | 'val2';
@Injectable()
export class MyService {
constructor(
private appService: AppService,
// this token MUST match exactly to the one in the `provide` property of the custom provider
@Inject('MyToken') private myType: MyType
) {}
}
Если вы хотите добавить другие зависимости, просто убедитесь, что они доступны для модуля.
Другой вариант - пометить myType
как @Optional()
, что позволит Nest обойти инъекцию, если она неразрешима, тогда вы можете легко использовать значение по умолчанию, как раньше