[]» нельзя присвоить типу «InternalTransfert[]»

В методе getInternalTransfert() я хотел бы отобразить переменную svm.

Однако я получил сообщение об ошибке для следующей строки:

this.internalTransfertLines = res.TITRE.map(
  ...
Type '{ svm: number; }[]' is not assignable to type 'InternalTransfert[]'.
Type '{ svm: number; }' is missing the following properties from type 'InternalTransfert': 
isin, stock, label, place, and 4 more.ts(2322)

сообщение

ТС

export class InternalTransfertWatchComponent implements OnInit, OnDestroy {
    private unsubscribe$ = new Subject < void > ();
    internalTransfertLines: InternalTransfert[] = [];

    constructor(private service: InternalTransfertWatchService) {}


    ngOnInit(): void {}

    ngOnDestroy(): void {
        this.unsubscribe$.next();
        this.unsubscribe$.complete();
    }


    getInternalTransfert(): void {
        this.service.getInternalTransfert().pipe(
            takeUntil(this.unsubscribe$)
        ).subscribe(res => {
            if (res.RETURNCODE === ApiResponseCodeEnum.Ok) {
                this.internalTransfertLines = res.TITRE.map(
                    internalTransfertLine => {
                        return {
                            svm: internalTransfertLine.SVM,
                        }
                    }
                );
            }
        });
    }

}

внутренний-transfer.response.ts

export interface InternalTransfertResponse extends ApiResponse {
    TITRE: {
        SVM: number;
        ISIN: string;
        STOCK: string;
        LABEL: string;
        PLACE: number;
        PLACELABEL: string;
        REGR: number;
        REGLABEL: string;
        DEVISE: string;
    } [];
}

внутренний-transfer.ts

export interface InternalTransfert {
    svm: number;
    isin: string;
    stock: string; 
    label: string;
    place: number;
    placelabel: string;
    regr: number;
    reglabel: string;
    devise: string 
}

Спасибо за вашу помощь

Что непонятно из сообщения об ошибке? Вы включаете только svm, но все остальные свойства также необходимы.

jonrsharpe 29.03.2022 11:26
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
2
1
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сообщение об ошибке довольно ясно. Есть обязательные поля, которые вы не заполняете. В интерфейсе все поля обязательны:

export interface InternalTransfert {
    svm: number;
    isin: string;
    stock: string; 
    label: string;
    place: number;
    placelabel: string;
    regr: number;
    reglabel: string;
    devise: string 
}

Итак, это недействительно:

this.internalTransfertLines = res.TITRE.map(
                    internalTransfertLine => {
                        return {
                            svm: internalTransfertLine.SVM,
                        }
                    }
                );

Вы заполняете только свойство svm и не хватает всех остальных. Следовательно, сообщение об ошибке с просьбой заполнить другие поля, isin, stock и т. д.

У вас есть 2 возможности:

  1. Если поля на самом деле не обязательны, объявите их необязательными, например:
export interface InternalTransfert {
    svm?: number;
    isin?: string;
    stock?: string; 
    label?: string;
    place?: number;
    placelabel?: string;
    regr?: number;
    reglabel?: string;
    devise?: string 
}
  1. Если поля должны быть обязательными, но вам удобно их не заполнять, вы можете объявить internalTransfertLines как Partial<InternalTransfert>[] :
internalTransfertLines: Partial<InternalTransfert>[] = [];

Другие вопросы по теме