【问题标题】:how to initialize constructor arguments by passing JSON at the time of object creation in typescript如何在打字稿中创建对象时通过传递 JSON 来初始化构造函数参数
【发布时间】:2017-11-25 14:28:58
【问题描述】:

假设我有一堂课

export class PersonName {
    constructor(
        public firstName: string = "",
        public lastName: string = "",
        public middleName: string = "",
    ) { }
}

我想通过在创建对象时传递 json 对象来初始化在构造函数中声明的这些变量。

例如:

var person = new Person({
        "firstName"  : "abc",
        "lastName"   : "xyz",
        "middleName" : ""
       });

【问题讨论】:

  • 您的示例不是有效的 JSON(甚至不是有效的语法),您的意思是 : 而不是 =
  • 是的,这只是复制粘贴错误。您对此有什么解决方案吗?

标签: typescript typescript-typings typescript2.0


【解决方案1】:

一种方法是为构造函数提供重载,然后测试第一个参数是字符串还是包含字段的对象:

export class Person {
  public firstName;
  constructor(
      firstName: string,
      lastName: string,
      middleName: string,
  );  
  constructor(
      person: { firstName: string, lastName: string, middleName: string }
  );  
    constructor(
        arg1: string | { firstName: string, lastName: string, middleName: string } = "",
        public lastName: string = "",
        public middleName: string = "",
    ) {
      if (typeof arg1 === "string") {
        this.firstName = arg1;
      } else {
        this.firstName = arg1.firstName;
        this.lastName = arg1.lastName;
        this.middleName = arg1.middleName;
      }
    }
}

const person = new Person({
        "firstName": "",
        "lastName": "",
        "middleName": "",
 });
 const person2 = new Person("foo", "bar", "baz");

【讨论】:

    猜你喜欢
    • 2018-01-12
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2017-04-19
    • 1970-01-01
    • 2018-05-10
    相关资源
    最近更新 更多