Как вывести код в виде строки на имя класса в JavaScript? - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь десериализовать мои параметры URL, которые содержат имя класса, а затем протестировать существующий объект с этим классом.

Я думал, что смогу получить реальный класс с eval, как это

let type = eval(this.route.snapshot.queryParams['type']);
let id = +this.route.snapshot.queryParams['type'];

this.selectedResult = this.data.find(x => x.constructor === type && x.id === id);

Но eval бросков:

Uncaught ReferenceError: MyClass не определен

Действительно, когда я ставлю точку останова в строке eval, мои бизнес-классы не определяются.

Я предполагаю, что импорт на самом деле не импортирует классы, потому что он используется только для проверки типов перед компиляцией.

Как я могу это сделать?

1 Ответ

0 голосов
/ 17 сентября 2018

Вы можете просто проверить имя конструктора:

x.constructor.name === this.route.snapshot.queryParams['type']

В качестве бонуса это будет меньше угрозы безопасности для ваших пользователей (браузер вашего пользователя не выдает случайную строку, которая могла быть передана внапример, по ссылке в письме).

По-прежнему не очень хорошая идея передавать нефильтрованные ссылки кода в URL: что, если реальное имя класса изменится?

...