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()
);

