Это происходит из-за аналогичной ошибки, с которой я столкнулся в одном из моих проектов, но, поскольку она исправлена, я просто хочу знать, почему это происходит.
В Typescript при использовании константного перечисления строк он компилируется либо в строку, либо в объект, у которого есть свойство, являющееся этой строкой.
См. Пример здесь
И еще один здесь . (Чтобы увидеть скомпилированный JS, нажмите на стрелку рядом с JS (Typescript) и выберите «Просмотр скомпилированного JS»)
При использовании значения константного перечисления, по крайней мере, если вы AOT оптимизируют угловую сборку, перечисление полностью отбрасывается и заменяется строками.
Проверьте этот пример
Как вы увидите, он отлично работает в stackblitz, потому что он компилируется без оптимизации.
Если вы загрузите его и соберете его с помощью ng build --prod
, поскольку он также активирует --build-optimizer
и --aot
, развернутая сборка будет аварийно завершена во время выполнения.
Это простой пример, который можно найти в документации по анимации angular.io .
То, что я изменил, находится в /src/app/hero-list-basic.component.ts, строки 15, 44, 48, 60 .
Если вы посмотрите на скомпилированный пакет JS, вы увидите, что перечисление нигде не определено. Это происходит независимо от существующих ссылок (как вы можете видеть в конструкторе в строке 60). Очевидно, что встроенная сборка заменяет enum соответствующей строкой, как и компилятор TS в TS Playground.
Моя проблема в том, что в декораторе (@Component
) вы увидите, что вместо встроенного он равен нулю. Расположение в моем bundle.js ~ строка 6557.
(строка с name: "active"
@ line 6569 имеет значение, потому что я не менял его при этой сборке со строки на перечисление, игнорирую его)
Это ошибка в компиляторе TS, в компиляторе AOT, в каком-то плагине веб-пакета (для минимизации / углификации), или я просто глуп, что так много смотрю на это? Заранее благодарю за ваш вклад!