类型为"数字"的参数不可分配给类型为"字符串"的参数。将旧项目导入新项目时



在将我完成的项目导入另一个项目后,我突然出现了以下错误:

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

我在旧项目中的原始代码功能齐全,这是怎么出错的?如果我错了,请纠正我,但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>
~~~~~~~~~~~~~~~~

UPDATE 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;
}

您的onSubmit方法采用2个参数。

onSubmit(id: string, data: User)

您已将id键入为string

从模板调用onSubmit时使用:

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

selectedUser._idnumber

所以你得到错误

类型为"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;
}

最新更新