Как сгенерировать тип во время выполнения в угловых - PullRequest
0 голосов
/ 22 января 2019

Я должен генерировать тип во время выполнения, потому что тип может измениться. Для типа - я знаю название каждого поля (свойства) и их тип. Данные для этого типа поступают из REST API в виде списка пар ключ / значение. Когда я получаю эти данные, мне нужно сопоставить их с правильным типом / классом / моделью, чтобы впоследствии я мог связать массив этого типа с сеткой.

Я посмотрел на интерфейс с динамическими ключами, но проблема в том, что мне приходится жестко кодировать название ключа. Я также посмотрел на тип «Запись» в машинописном тексте, но здесь также я, чтобы установить значение для каждого ключа, я не могу использовать переменную - мне нужно жестко ее кодировать - ОК, я могу попытаться составить список ключей из моего , но как я могу присвоить ему значение без жесткого кодирования.

// Это моя функция для генерации массива нового типа (скажем, MYNEWTYPE) из массива Todo // Todo имеет список свойств TodoProperties, хранящихся в виде пары ключ / значение public CreateNewArray (TodoList: Array): void {

TodoList.forEach ((d) => {

  d.ToDoPropertiesDto.forEach((p)=>{

        //TodoProperties is alist of key/value pair (for example [{"Name":"Owner","Value":"MrJay"},{"Name":"Occupation","Value":"Engineer"}])

        // What I want is for example  if p.Name=Owner then assign p.value to MYNEWTYPE.Owner



  });

}); * * 1 010

}

Ожидаемый результат - массив MYNEWTYPE, где каждое поле / свойство получает значение, полученное из пары ключ / значение. Проблема в том, что когда-нибудь они захотят добавить новый набор пар ключ / значение, поэтому я должен создать свой новый тип из этого списка пар ключ / значение

1 Ответ

0 голосов
/ 22 января 2019

Javascript - это нетипизированный язык. Вы можете найти объяснение в этой статье: Является ли JavaScript нетипизированным языком? .

Набор текста в Typescript только для того, чтобы помочь вам с семантикой и проверкой работоспособности вашего кода во время компиляции.

После того, как ваш код скомпилирован в Javascript и запущен, больше нет информации о наборе. Все будет работать, пока существует пара ключ / значение, к которой вы обращаетесь.

Так что в вашем случае не беспокойтесь о наборе текста, если вы знаете, что делаете: используйте тип any. Очевидно, что после этого вы остаетесь сами по себе: вам не нужно облажаться и получать доступ к несуществующим полям, или это приведет к ошибке во время выполнения. У вас не будет системы типов, чтобы указать на ошибку, допущенную вами в вашем коде.

...