代码之家  ›  专栏  ›  技术社区  ›  Mehdi Benmoha

在Angular 5/TypeScript中获取类(接口)属性,而不指定默认值

  •  0
  • Mehdi Benmoha  · 技术社区  · 8 年前

    让我们假设我有一个接口A,我按照Angular style指南将其声明为类。这个类有许多属性,我想获取它们的名称,而不必给它们赋值。我怎样才能做到这一点?

    A类:

    export class A {
      property1: string;
      property2: string;
      ...
      property30: string;
    }
    

    我尝试从这个类实例化一个新对象并调用 Object.keys 和 Object.getOwnPropertyNames 但这两个方法返回一个空数组,因为它们忽略了未定义的值属性。有没有办法绕过这种行为?还是我打破了JavaScript/TypeScript模式D

    2 回复  |  直到 8 年前
        1
  •  3
  •   Titian Cernicova-Dragomir    8 年前

    属性声明的工作方式是,它们只是向编译器提示该属性可能在运行时存在。在JavaScript中,您不需要声明字段,因此在分配字段之前,它不会存在于对象上。如果初始化字段,即使 null 或 undefined 该字段将显示在对象上。这是实现你想要的最简单的方法。

    另一种方法是在每个领域都使用装饰师。这将更加明确,但不会更短,也不一定不容易出错

        2
  •  0
  •   windmaomao    8 年前

    确保编译器首先支持类。然后您必须执行接口或类。如果这是一门课,你需要

    class A {
        title = ''
    }
    var a = new A();
    console.log(a);
    

    将标题声明为字符串, title: String = '' 。你的写作更多的是为了界面。这是输出,

    Object {
        title: ""
    }
    

    是的,我现在更理解你的问题了,没有赋值,它不会设置属性。

    interface B {
        title: String;
    }
    class A implements B {
        title = '';
    }
    var a = new A();
    console.log(a);
    

    如果是这样,一个简单的解决方案是 违约 该财产的价值。或者查看一个列表,根据其类型手动初始化它们。

    class A {
        keys = {
            title: 'String'
        }
    }