【问题标题】:Evaluate parameter in class constructor评估类构造函数中的参数
【发布时间】:2017-08-23 22:29:50
【问题描述】:

在创建一个以对象为参数的实例后,我想实现两件事:

首先,遍历参数的属性并将其添加到实例中,如果它与构造函数上方声明的此属性方式完全相同。有没有一种快速的方法,我必须一个一个地检查这个吗?

其次,我想检查是否定义了每个声明的属性,如果没有,则设置默认值。

var data = {
  langs: ["de","en","fr"],
  lesson: {
    de: "Einführung",
    en: "Introduction"
  },
  keywords: []
}

class Video {
  langs: Array<string>;
  lesson: object;
  topic: object;
  intro: object;
  keywords: Array<Keyword>;

  constructor (data) {
    for (let prop in data) {
      if (/*data.s is of type as declared above constructor()*/) {
        this[prop] = data[prop];
      } else {
        throw "Type of {{prop}} is invalid";
      }
    }
    for (let prop in /*All the props defined above constructor()*/) {
      if (!this.hasOwnProperty(prop)) {
        //Set default value;
      }
    }
  }
}

var video = new Video(data);

【问题讨论】:

  • 不,没有办法做到你所要求的。原因是属性名称及其类型在编译过程后都丢失了。您需要将该信息保存为代码的一部分,无论是您自己还是使用装饰器(元数据)
  • 您可以这样做,但需要进行一些额外的检查。数组,例如 Object 类型的 ar。

标签: javascript angular typescript


【解决方案1】:

有没有一种快速的方法,我是否必须一一检查?

使用类型注释,例如改变

constructor (data) {

constructor (data: { langs : string[] /* so on */}) {

我想检查每个声明的属性是否已定义,如果没有,请设置默认值。

使用 strictNullChecks 将逻辑移出代码:https://basarat.gitbooks.io/typescript/content/docs/options/strictNullChecks.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 2013-08-31
    相关资源
    最近更新 更多