ค้นหาเว็บไซต์

javascript - อาร์กิวเมนต์ที่ไม่ปลอดภัยชนิด `any` ถูกกำหนดให้กับพารามิเตอร์ของชนิด `Observable`


ฉันมีโค้ดที่ดึงข้อมูลจากแบ็กเอนด์

นี่คือมัน

 @Injectable()
export class DictionariesDatasourceFacadeService {
  public invoiceTemplate: IDataSource<IComboboxItem>;
  public replacedLegalEntity: IDataSource<IComboboxItem>;
  public salesOrderTemplate: IDataSource<IComboboxItem>;
  public deliveryNoteTemplate: IDataSource<IComboboxItem>;
  public createInvoiceAction: IDataSource<IComboboxItem>;
  public clientPortal: IDataSource<IComboboxItem>;

  private readonly dataSourceFactory = inject(DataSourceFactory);
  private readonly invoiceTemplateService = inject(InvoiceTemplateService);
  private readonly replacedLegalEntityService = inject(LegalEntityService);
  private readonly salesOrderTemplateService = inject(SalesOrderTemplateService);
  private readonly createInvoiceActionService = inject(CreateInvoiceActionService);
  private readonly deliveryNoteTemplateService = inject(DeliveryNoteTemplateService);
  private readonly clientPortalService = inject(ClientPortalService);

  public constructor() {
    this.init();
  }

  private init(): void {
    this.invoiceTemplate = this.createGenericDataSource(this.invoiceTemplateService.getSimpleInvoiceTemplates());
    this.replacedLegalEntity = this.createGenericDataSource(this.replacedLegalEntityService.getSimpleLegalEntities());
    this.salesOrderTemplate = this.createGenericDataSource(
      this.salesOrderTemplateService.getSimpleSalesOrderTemplates()
    );
    this.deliveryNoteTemplate = this.createGenericDataSource(
      this.deliveryNoteTemplateService.getSimpleDeliveryNoteTemplates()
    );
    this.createInvoiceAction = this.createGenericDataSource(
      this.createInvoiceActionService.getAlgorithms()
    );
    this.clientPortal = this.createGenericDataSource(this.clientPortalService.getActiveClientPortals());
  }

  private createGenericDataSource<T extends IComboboxItem>(method: Observable<T[]>): IDataSource<IComboboxItem> {
    return this.dataSourceFactory.createLocalDataSource(
      () => method.pipe(map(x => x.sort(sortByName))),
      filterByNameFn
    );
  }
}

ในแถว this.createInvoiceActionService.getAlgorithms() ฉันได้รับข้อผิดพลาดเหล่านั้น

แต่ฉันไม่เห็นประเภท any ใดๆ

นี่คือโค้ด getAlgorithms

 @Injectable({
    providedIn: 'root'
})
export class CreateInvoiceActionService extends BaseHttpService {
    constructor(http: HttpClient) {
        super(getBasePath('app', '/api/v1/CreateInvoiceAction'), http);
    }

    public getAlgorithms(): Observable<$models.CreateInvoiceActionSimpleDTO[]> {
        return this.post<$models.ICreateInvoiceActionSimpleDTO[]>(
            `GetAlgorithms`,
        ).pipe($mappers.mapCollection($models.CreateInvoiceActionSimpleDTO));
    }
}

ตัวอย่างเช่น แถวไม่แสดงข้อผิดพลาดนี้

  this.deliveryNoteTemplate = this.createGenericDataSource(
      this.deliveryNoteTemplateService.getSimpleDeliveryNoteTemplates()
    );

และนี่คือโค้ดที่สร้างขึ้น

ฉันสามารถแก้ข้อผิดพลาดนี้ได้อย่างไร?

คำตอบ #1

ตามความเข้าใจของฉัน เราจำเป็นต้องกำหนดชนิดทั่วไป T ในการกำหนดชนิดด้านล่างนี้

  private createGenericDataSource<T extends IComboboxItem>(method: 
  Observable<T[]>): IDataSource<IComboboxItem> {
    return this.dataSourceFactory.createLocalDataSource(
      () => method.pipe(map(x => x.sort(sortByName))),
      filterByNameFn
    );
  }

เนื่องจาก getAlgorithms คืนค่า observable ประเภท $models.CreateInvoiceActionSimpleDTO บางทีการรวมประเภทนี้เป็น T อาจจะแก้ปัญหาของคุณได้!

this.createInvoiceAction = this.createGenericDataSource<$models.CreateInvoiceActionSimpleDTO>( // <-changed here!
  this.createInvoiceActionService.getAlgorithms()
);