Arrays 类型脚本、JSON数组、可选属性。打字脚本太有用了

Arrays 类型脚本、JSON数组、可选属性。打字脚本太有用了,arrays,json,typescript,Arrays,Json,Typescript,我有一个typescript对象,如下所示: class myObj { public param1, public param2, public param3 } interface IMyObj { param1: string; param2: string; param3?: any; } class otherObj { public arrayOfMyObj: IMyObj[] constructor() { th

我有一个typescript对象,如下所示:

class myObj {
   public param1,
   public param2,
   public param3
}
interface IMyObj {
   param1: string;
   param2: string;
   param3?: any;
}


class otherObj {
   public arrayOfMyObj: IMyObj[]

   constructor() {
       this.arrayOfMyObj = [{ param1: "value", param2: "value" }]
   }
}
在我的另一个对象中,我有一个该对象的数组

class otherObj {
   public arrayOfMyObj:myObj[]

   constructor(){
       this.arrayOfMyObj = [{param1: "value", param2: "value"}]
   }
}

但是,这段代码会抛出一个错误,因为JSON数组中的第一项与myObj不完全匹配,它缺少param3,如果有任何方法使它成为可选的,或者只是不检查它?显然,我通常只是创建一个新的myObj并填充它,但是这是一个非常长的硬编码JSON数组。

它看起来像这样:

class myObj {
   public param1,
   public param2,
   public param3
}
interface IMyObj {
   param1: string;
   param2: string;
   param3?: any;
}


class otherObj {
   public arrayOfMyObj: IMyObj[]

   constructor() {
       this.arrayOfMyObj = [{ param1: "value", param2: "value" }]
   }
}
笔记 默认情况下,所有类成员都是公共的


最好指定变量的类型。“未指定类型”是指在类型检查失败的情况下不会提醒您可能出现的错误的任何类型。

它看起来如下所示:

class myObj {
   public param1,
   public param2,
   public param3
}
interface IMyObj {
   param1: string;
   param2: string;
   param3?: any;
}


class otherObj {
   public arrayOfMyObj: IMyObj[]

   constructor() {
       this.arrayOfMyObj = [{ param1: "value", param2: "value" }]
   }
}
笔记 默认情况下,所有类成员都是公共的

最好指定变量的类型。“未指定类型”是指在类型检查失败的情况下不会提醒您可能出现的错误。

可能会对您有所帮助

另一种方法是使用Object.assign扩展有效的类型化对象 对于该属性,您只需在本例中省略属性a和c 范例

export class A {
    a:number=1;
    b:number;
    c:string;
    d:string; }

let validA:A = Object.assign(new A(),{
    b:3,
    d:'Lorem ipsum' 
}); 
我个人更喜欢这种语法,以避免多行对象初始化和创建 接口,因此如果一个共同响应的类 存在于我的应用程序的每个型号中

此外,不要犹豫在类中设置默认值 定义,即使在这种情况下不是强制性的

最后一件重要的事情是,在这种情况下,不要松散类方法 反对{}铸造的案例

也许会帮助你

另一种方法是使用Object.assign扩展有效的类型化对象 对于该属性,您只需在本例中省略属性a和c 范例

export class A {
    a:number=1;
    b:number;
    c:string;
    d:string; }

let validA:A = Object.assign(new A(),{
    b:3,
    d:'Lorem ipsum' 
}); 
我个人更喜欢这种语法,以避免多行对象初始化和创建 接口,因此如果一个共同响应的类 存在于我的应用程序的每个型号中

此外,不要犹豫在类中设置默认值 定义,即使在这种情况下不是强制性的

最后一件重要的事情是,在这种情况下,不要松散类方法 反对{}铸造的案例

如果你不给新的myObj打电话,那么你的类型是错误的。Typescript并没有太大的帮助,它正是为验证类型而做的。如果你让myObj成为一个接口,那么你可以声明可选字段。它还可以更好地匹配您没有在这里调用任何构造函数的事实。如果您没有调用新的myObj,那么您的类型是错误的。Typescript并没有太大的帮助,它正是为验证类型而做的。如果你让myObj成为一个接口,那么你可以声明可选字段。它还可以更好地匹配您没有在这里调用任何构造函数的事实。