Инициализация объекта с помощью шаблона в сжатой форме - PullRequest
0 голосов
/ 01 марта 2019

Я относительно новичок в Typescript (и Javascript) и возился с классами.Я пытаюсь найти краткий способ создания объекта, который будет заполнен похожими записями, но при этом сохранит безопасность типов.

Вот код, который я написал:

let testFixture: Fixture = (() => {
  let stringPrefix = 'TEST BaseEventDTO';
  let result = {}; // The object to become a "Fixture".

  ['id', 'name', 'location'].forEach(element => {
    result[`${element}`] = generateId(`${stringPrefix} ${element}`);
  });

  return result;
})();

В этом коде приборы имеют обязательные строковые поля id, name и location.Кроме того, я хочу, чтобы все они имели stringPrefix перед именем поля, как показано в foreach.Я пытаюсь создать объект, не набирая один и тот же материал более одного раза, например, префикс или имена полей.Результатом, однако, является предупреждение от VSCode, что Type {} is missing the following properties of Type 'Fixture': 'id', 'name', and 'location'.

Есть ли обычный способ (или просто рабочий путь), чтобы пойти по этому поводу?

Также, чтобы уточнить, я пишу это с помощью анонимной функции, чтобы сделать переменную stringPrefix локальной.

РЕДАКТИРОВАТЬ: изменение return result; на return <Fixture>result; исправило ошибку.Но я оставляю этот случай, когда мое решение является ловушкой, или, если есть другой, лучший способ сделать это.

И для дальнейшего разъяснения, результат должен, в конце концов, быть эквивалентным этому:

let result = {
    id: generateID(`${stringPrefix} id`),
    name: generateID(`${stringPrefix} name`),
    location: generateID(`${stringPrefix} location`)
}

, который затем будет приведен к типу 'Fixture'.

1 Ответ

0 голосов
/ 02 марта 2019

Я думаю, вам всегда нужно будет разыграть, и у вас есть два варианта

Приведение начальной переменной

const keys: Array<keyof Fixture> = ['id', 'name', 'location'];

let testFixture: Fixture = (() => {
  let stringPrefix = 'TEST BaseEventDTO';
  let result = {} as Fixture

  keys.forEach(element => {
    result[element] = generateId(`${stringPrefix} ${element}`);
  });

  return result;
})();

Приведение возвратавыписка

const keys: Array<keyof Fixture> = ['id', 'name', 'location'];

let testFixture: Fixture = (() => {
  let stringPrefix = 'TEST BaseEventDTO';
  let result: Partial<Fixture> = {}

  keys.forEach(element => {
    result[element] = generateId(`${stringPrefix} ${element}`);
  });

  return result as Fixture;
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...