Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeScript类-将对象数组声明为属性_Javascript_Angular_Typescript_Oop - Fatal编程技术网

Javascript TypeScript类-将对象数组声明为属性

Javascript TypeScript类-将对象数组声明为属性,javascript,angular,typescript,oop,Javascript,Angular,Typescript,Oop,我正在寻找使用TypeScript声明类时将对象数组声明为属性的最合适方法。这用于具有未知数量的角模板驱动窗体复选框的窗体 像我下面介绍的那样,为这些对象创建一个单独的类是明智的,还是有更好的方法?我试着从很多方面寻求建议,但找不到太多。我是不是太离谱了 export class Companion { id: string; name: string; chosen: boolean; } export class ExampleForm { name: st

我正在寻找使用TypeScript声明类时将对象数组声明为属性的最合适方法。这用于具有未知数量的角模板驱动窗体复选框的窗体

像我下面介绍的那样,为这些对象创建一个单独的类是明智的,还是有更好的方法?我试着从很多方面寻求建议,但找不到太多。我是不是太离谱了

export class Companion {
    id: string;
    name: string;
    chosen: boolean;
}

export class ExampleForm {
    name: string;
    email: string;
    companions: Companion[];
}

我认为Typescript中的大多数人(不仅仅是Angular)不使用这些模型的类。我们为他们使用接口。因此,您的
示例表单将如下所示

export class ExampleForm{
    // This was what you already had
    companions: Companion[];
}
然后使用一个接口定义
伴奏

export interface Companion{
    id: string;
    name: string;
    chosen: boolean;
}

这样做将允许您只为
同伴
使用普通JavaScript对象。但您将在每个对象上获得类型安全性。太棒了

我就是这样做的。此外,根据您的后端(如果您有后端),这可能会反序列化esaier,具体取决于您在表单帖子中期望的对象结构。太棒了,谢谢,感兴趣为什么它可能更容易反序列化?为什么
而不仅仅是
接口
?@jcalz,因为我需要使用它为复选框创建对象?有一个问题对模型的类和接口的优缺点进行了很好的讨论。明白了,谢谢,这很有意义。知道有什么东西闻起来不对劲,但却想不出来。我尝试了
同伴:{id:string,name:string,selected:boolean}[]但TypeScript在分配对象时不喜欢它。这更有意义,我们将尝试一下。谢谢是的,刚刚试过,真的很棒:)再次感谢。