声明时,还有更好的方法来初始化类中Object的值吗?

时间:2018-10-26 02:12:51

标签: angular typescript

我想做的就是这样。

export class TestModel {
    item1: {title: 'specific title', content: string};
    item2: {title: 'specific title', content: string};
}

声明对象{title:string,value:string},并仅初始化title。
内容的值将在声明后添加。

但是没有用。 所以我将其更改为这样。

interface testInterface {
    title: string;
    content: string;
}

export class TestModel {
    item1: testInterface ;
    item2: testInterface ;

    constructor() {
        this.item1 = { title: 'specific titleA', content: '' };
        this.item2 = { title: 'specific titleB', content: '' };
    }
}

我想在没有构造函数()的情况下初始化标题,以减少代码量。
(如果可能的话,仅初始化标题,而不初始化内容)。

我尝试了
item1: testInterface = { title = 'specific titleA, content = '' };
而且也没有用。

有什么好的解决方法吗?

1 个答案:

答案 0 :(得分:1)

您可以在字段声明中分配默认值,然后将Partial对象传递给构造函数并合并它们:

interface TestInterface {
  title: string;
  content: string;
}

export class TestModel {
  item1: TestInterface = {title: 'Default title', content: 'Default content'};
  item2: TestInterface = {title: 'Default title', content: 'Default content'};

  constructor(item1: Partial<TestInterface>, item2: Partial<TestInterface>) {
    this.item1 = {...this.item1, ...item1};
    this.item2 = {...this.item2, ...item2};
  }
}

const x = new TestModel({title: 'Specific title 1'}, {content: 'Content 2'});

如果仍然重复太多,则可以声明一个常量以保存默认值:

const DEFAULT_TEST_INTERFACE = {title: 'Default title', content: 'Default content'};

export class TestModel {
  item1: TestInterface = DEFAULT_TEST_INTERFACE;
  item2: TestInterface = DEFAULT_TEST_INTERFACE;

  /* rest is same as above */
}