Javascript “this”未在TypeScript类内更新

Javascript “this”未在TypeScript类内更新,javascript,typescript,Javascript,Typescript,我正在尝试使用方法将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) {

我正在尝试使用方法将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);
    }
}
如果我创建了一个新表单并添加了一个错误,那么错误数组不会更新

const form1 = {errors: []};
const form2 = new Form(form1);
form2.addError ({types: ['a'], message: 'error'});
//form2.errors.length returns 0
我正在创建一个新的表单实例,因为我想在构造函数中处理深度复制

我在这里遗漏了什么吗?

你的[k:string]:任何;正在破坏TypeScript给你的安全网


如果你没有它,你会得到一个编译错误,因为adderror不是一个东西,TypeScript甚至会建议adderror作为最接近的有效替代品。

我无法使用你提供的代码进行复制。在这个屏幕截图中,您可以看到form2.errors是一个数组,其中包含预期的1个元素。form1的错误下划线指出form1没有id属性:


您的代码存在几个问题,这些问题应显示为编译时错误:

type关键字要求后面的名称后面跟一个等号。如果它是一个类,那么您可以删除相等项

如果您有一个包含方法的类,并且希望将其作为变量传递,则应该

使用新的,或 在您使用的对象文本中包含所有已定义的方法和属性。 或者,如果您只需要属性,请使用接口,正如我在下面所做的

导出类型错误={ 类型:字符串[]; 消息:字符串; } 导出接口格式{ [k:字符串]:任意; id:字符串; 错误:错误[]; } 导出类表单实现了IForm{ [k:字符串]:任意; id:字符串; 错误:错误[]; 构造器bj?:形似的{ this.id=; 如果obj{ Object.this,obj; 如果对象错误{ this.errors=obj.errors.mapx=>{…x}; } } } 公共加法器=错误:错误=>{ 这个.errors.pusherror; } } 常量form1:IForm={errors:[],id:'form1'}; const form2=新的form1; form2.addError{types:['a'],消息:'error'}; console.logform2.errors.length;
错误是一个空的arr吗?抱歉@nem035,错过了一个LinedError!==加法器。。。您的控制台中有错误吗?@HereticMonkey这不是问题所在,它是输入错误。您应该看到几个编译时错误。。。