javascript - Osäker argument av typen `any` tilldelad en parameter av typen `Observable`
Jag har kod som returnerar data från backend
Här är det
@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
);
}
}
På raden this.createInvoiceActionService.getAlgorithms() fick jag dessa fel.
Men jag ser inga any-typer
Här är getAlgorithms-koden
@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));
}
}
till exempel rad visar inte detta fel
this.deliveryNoteTemplate = this.createGenericDataSource(
this.deliveryNoteTemplateService.getSimpleDeliveryNoteTemplates()
);
och här är genererad kod
Hur kan jag lösa detta fel?
Svar #1
Enligt min förståelse behöver vi definiera den generiska typen T i nedanstående typdefinition.
private createGenericDataSource<T extends IComboboxItem>(method:
Observable<T[]>): IDataSource<IComboboxItem> {
return this.dataSourceFactory.createLocalDataSource(
() => method.pipe(map(x => x.sort(sortByName))),
filterByNameFn
);
}
Eftersom getAlgorithms returnerar en observabel av typen $models.CreateInvoiceActionSimpleDTO, kanske inkludering av denna typ som T löser ditt problem!
this.createInvoiceAction = this.createGenericDataSource<$models.CreateInvoiceActionSimpleDTO>( // <-changed here!
this.createInvoiceActionService.getAlgorithms()
);

