我正在尝试使用一种方法将Error
类型的对象添加到数组中。所以这是我的代码:
export type Error{
types: string[];
message: string;
}
export class Form {
[k: string]: any;
id: string;
errors: Error[];
constructor(obj?: Form) {
this.id = '';
if (obj) {
Object.assign(this, obj);
if (obj.errors) {
this.errors = obj.errors.map(x => ({...x}));
}
}
}
public addError = (error: Error) => {
this.errors.push(error);
}
}
如果我确实创建了一个新的Form
并向其中添加一个Error
,则错误数组不会更新!!!
const form1 = {errors: []};
const form2 = new Form(form1);
form2.addError ({types: ['a'], message: 'error'});
//form2.errors.length returns 0
我要创建Form
的新实例,因为我想在构造函数中处理深层复制。
我在这里想念东西吗?
答案 0 :(得分:1)
您的代码存在多个问题,这些问题应显示为编译时错误:
type
关键字希望其后的名称后面带有等号。如果它是一类,那么您可以删除等号。
如果您的类带有方法,并且想将其作为变量传递,则应该
new
或或者,如果您想要的只是属性,请使用一个接口,如下文所述。
export type Error = {
types: string[];
message: string;
}
export interface IForm {
[k: string]: any;
id: string;
errors: Error[];
}
export class Form implements IForm {
[k: string]: any;
id: string;
errors: Error[];
constructor(obj?: IForm) {
this.id = '';
if (obj) {
Object.assign(this, obj);
if (obj.errors) {
this.errors = obj.errors.map(x => ({...x}));
}
}
}
public addError = (error: Error) => {
this.errors.push(error);
}
}
const form1: IForm = { errors: [], id: 'form1'};
const form2 = new Form(form1);
form2.addError({types: ['a'], message: 'error'});
console.log(form2.errors.length);
答案 1 :(得分:0)
答案 2 :(得分:-1)
您的[k: string]: any;
正在破坏TypeScript为您提供的安全网。
如果没有它,您将因adderror
不能成为事物而出现编译错误,并且TypeScript甚至建议addError
作为最有效的替代方案。