假设我有这样的接口:

export interface IParser {
  parse(text: string):string
}

和几个实现该接口的类:

@Injectable()
export class FirstParser implements IParser {
   public parse(text: string): string {
     return text + 'first';
   }
}

@Injectable()
export class SecondParser implements IParser {
   public parse(text: string): string {
     return text + 'second';
   }
}

现在,我有一个服务,我正在try 向他注入解析器列表:

@Injectable()
export class ParserService {
    constructor(private readonly parsers: IParser[]) {}

    public parse(text: string): string {
        let parsedText = text;
        parsedText = this.parsers.reduce((acc: string, result) => {
            return result.parse(acc);
        }, parsedText);
        return parsedText;
    }
}

我正在try 使应用程序模块(在本例中为parser-service.mode.ts)正常工作 通过注入包含FirstParser、Second Parser的类的数组/列表.

@Module({
    providers: [
        ParserService,
        {
          provide: Array<IParser>,
          useClass: ???,
        },
    ],
})
export class ParserServiceModule {}

有什么主意吗?这在NestJs中是完全可能的吗?

谢谢.

推荐答案

您try 实现的功能已被作为功能请求,但由于优先级较低,尚未实现.看看这feature request个.

但是,您可以通过将IParser个实现转换为数组来利用factory provider功能.


@Module({
    providers: [
        FirstParser,
        SecondParser,
        {
          provide: 'Parser',
          useFactory: (...parsers) => new ParserService(parsers),
          inject: [FirstParser, SecondParser],
        },
    ],
})
export class ParserServiceModule {}

Typescript相关问答推荐

如何访问Content UI的DatePicker/中的sx props of year picker?'<>

如何推断计算逻辑的类型

在嵌套属性中使用Required

角效用函数的类型推断

具有自引用属性的接口

TypeScrip中的类型安全包装类

如何从MAT-FORM-FIELD-MAT-SELECT中移除焦点?

返回嵌套props 的可变元组

Typescript -返回接口中函数的类型

在抽象类属性定义中扩展泛型类型

将类型脚本函数返回类型提取到VSCode中的接口

如何从JWT Reaction中提取特定值

基于泛型的类型脚本修改类型

仅当类型为联合类型时映射属性类型

如何为对象数组中的每个条目推断不同的泛型

如何限定索引值必须与相应属性的id字段相同

显式推断对象为只读

Typescript 确保通用对象不包含属性

如何在故事书的Typescript 中编写decorator ?

具有来自其他类型的修改键名称的 TypeScript 通用类型