Angular) есть ли лучший способ инициализировать значение объекта в классе при объявлении?

Я пытаюсь сделать вот так.

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 = '' };
и это тоже не сработало.

Есть ли хорошее решение?

0
0
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 */
}

Вот это да. Спасибо! Я не знал Частичного объекта.

16777215 26.10.2018 08:47

Другие вопросы по теме