Как получить значения по умолчанию из объекта Typescript?

#javascript #reactjs #typescript

Вопрос:

допустим, у меня есть

  type DataItems = {
  id: number;
  title: string;
  subItems?: Array<DataItemChild>;
  checked: boolean;
  isEdit:boolean;
};
 

Я определил объект как

 const myObj = {} as DataItems;
 

когда я осматриваюсь myObj , я вижу {} .

Я ожидал, что:

    {
      id: 0,
      title: '',
      subItems:[],
      checked: false,
      isEdit:false
    }
 

Я мог бы определить свой объект как :

   const myObj = {
    id : 0,
    title: '',
    subItems: [],
    checked: false,
    isEdit: false,
  } as DataItems;
 

Но мне интересно, есть ли способ сделать это по умолчанию без необходимости определять его вручную?

Комментарии:

1. не используйте as , когда это возможно. пробовать const myObj: DateItems = {} . Так что Typescript выдаст ошибку о том, что вам не хватает некоторых реквизитов. На ваш вопрос: я об этом не знаю.

2. Машинопись не предназначена для выполнения

Ответ №1:

Самый простой способ сделать это-сделать a class , но вам всегда нужно использовать new DataItems , чтобы «получить» значения по умолчанию.

 type DataItemChild = any;

class DataItems {
  id: number = 0;
  title: string = '';
  subItems: DataItemChild[] = []
  checked: boolean = false;
  isEdit:boolean = false;
};

const myObj = new DataItems();
console.dir(myObj);
 

Игровая площадка для машинописи

Комментарии:

1. Я думаю, что это способ. То, что мне нужно, если есть встроенная функция машинописи, которая просто делает это за меня. Ваше решение хорошее, но оно все равно требует, чтобы я написал это вручную. то же, что и const myObj = { идентификатор : 0, заголовок:», подразделы: [], проверено: ложь, IsEdit: ложь,} в качестве элементов данных; и использование его в качестве типа по умолчанию.

2. Я приму это, так как это решение, я думаю, что то, что мне нужно, — это то, что в данный момент не поддерживает typescript.

3. То, что вы хотите, не существует в TypeScript или JavaScript. Преимущество по сравнению с их настройкой заключается в том, что вам нужно каждый раз устанавливать их вручную. Также обратите внимание: использование as просто говорит компилятору, что вы знаете лучше — он ничего не делает во время выполнения и не проверяет, чтобы подтвердить, что он «работает».

Ответ №2:

Нет, в typescript нет способа указать значение по умолчанию без его инициализации. Как бы typescript узнал, что вы хотите инициализировать число от 0, строка должна быть пустой, логическое значение должно быть пустым и так далее. Вы можете сделать следующее:

 type DataItems = {
  id: number;
  title: string;
  subItems?: Array<DataItemChild>;
  checked: boolean;
  isEdit:boolean;
};

const myObj : DataItems = {
      id: 0,
      title: '',
      subItems:[],
      checked: false,
      isEdit:false
    };