Аргумент типа 'число' не может быть назначен параметру типа 'строка'. при импорте старого проекта в новый - PullRequest
1 голос
/ 21 февраля 2020

После импорта моего завершенного проекта в другой проект я внезапно получаю эту ошибку:

ERROR in src/app/avior/users/users.component.html:43:79 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'.

43         <form [formGroup]="userForm" class="form-signin" (ngSubmit)="onSubmit(selectedUser._id,this.userForm.value)">

Моя функция onSubmit выглядит следующим образом:

  onSubmit(id: string, data: User) {
      this.aviorBackend.putUser(id, data)
      .subscribe(
        res => {
                console.log('Benutzer erneuert.');
                console.log(id);
                console.log(data);
                console.log(res);
                this.selectedUser = res;
               },
               error => {
                console.log('Error while deleting user: ', error);
                        }
                );
                      }

Мой оригинальный код в старом проекте полностью функциональный, как это go не так? Поправьте меня, если я ошибаюсь, но this.userForm.value представляется числом, и его нужно преобразовать в строку?

ОБНОВЛЕНИЕ После следования совету я все еще получаю эту ошибку:

    ERROR in src/app/avior/users/users.component.html:59:83 - error TS2345: Argument of 
type 'number' is not assignable to parameter of type 'string'.

    59     <button class="btn btn-danger btn-block" type="submit" (click)="deleteUserBtn(selectedUser._id)">Löschen</button>

 ~~~~~~~~~~~~~~~~

ОБНОВЛЕНИЕ 2 Интерфейс пользователя:

import { Role } from './role';

// was class and not interface!
export interface User {
    _id: number;
    mandator?: number;
    loginId: string;
    lastname: string;
    firstname: string;
    password: string;
    eMail: string;
    group?: string;
    role?: Role;
    active?: boolean;
    token?: string;
}

1 Ответ

1 голос
/ 21 февраля 2020

Ваш метод onSubmit принимает 2 параметра.

onSubmit(id: string, data: User)

id, которые вы ввели как string.

Из шаблона, который вы вызываете onSubmit с помощью:

(ngSubmit)="onSubmit(selectedUser._id,this.userForm.value)"

selectedUser._id является number

Таким образом, вы получаете ошибку

Аргумент типа 'номер' не может быть назначен параметру типа ' string '

Поскольку вы передаете число методу, принимающему строку.

Решение

Измените метод onSubmit на тип id как number:

onSubmit(id: number, data: User) { // changed string to number

Из ваших комментариев

interface необходимо изменить, чтобы отразить форму ваших данных:

export interface User {
    _id: string; // this should be a string
    mandator?: number;
    loginId: string;
    lastname: string;
    firstname: string;
    password: string;
    eMail: string;
    group?: string;
    role?: Role;
    active?: boolean;
    token?: string;
}
...