【问题标题】:TypeScript Classes - Declaring an Array of Objects as a PropertyTypeScript 类 - 将对象数组声明为属性
【发布时间】:2019-07-25 07:40:00
【问题描述】:

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

是否建议为对象设置一个单独的类,如下所示,还是有更好的方法?尝试以多种方式搜索这方面的建议,但找不到太多。我是不是有点离题了?

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

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

【问题讨论】:

  • 这正是我的做法。此外,根据您的后端(如果有的话),这可能会反序列化 esaier,具体取决于您在表单帖子中期望的对象结构。
  • 太棒了,谢谢,有兴趣为什么它可以更容易地反序列化?
  • 为什么是class 而不仅仅是interface
  • @jcalz 因为我需要用它来为复选框创建对象?
  • 有一个Angular Style Guide 问题here 很好地讨论了模型类和接口的优缺点。

标签: javascript angular typescript oop


【解决方案1】:

我认为 Typescript 中的大多数人(不仅仅是 Angular)不为这些模型使用类。我们为它们使用接口。所以你的ExampleForm 看起来像这样。

export class ExampleForm{
    // This was what you already had
    companions: Companion[];
}

然后使用接口定义Companion

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

这样做可以让您只对Companions 使用纯JavaScript 对象。但是您将获得每个对象的类型安全性。这真是太棒了。

【讨论】:

  • 明白了,谢谢,这很有道理。知道有什么东西闻起来不对劲,但想不通。我试过 companions: { id: string, name: string, chosen: boolean }[]; 但 TypeScript 在分配对象时不喜欢它。这更有意义,将尝试一下。谢谢!
  • 是的,刚刚试了一下,确实很棒:) 再次感谢。
猜你喜欢
  • 2011-01-13
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
  • 2019-12-02
  • 2021-10-13
  • 1970-01-01
  • 2021-10-24
  • 2020-01-07
相关资源
最近更新 更多