emitDecoratorMetadata и его важность в передаваемом коде
Мне любопытно о важности emitDecoratorMetadata
возможность переноса TS в JS (в контексте Angular 2). Если задано значение false и метаданные не будут включены в полученный код, какой эффект это даст?
Благодарю.
2 ответа
Вот сценарий, с которым я столкнулся, читая...
Инжекторы используют вывод метаданных компилятором машинописи, чтобы определить, какие типы сервисов запрашиваются компонентом. Метаданные выводят информацию о количестве и типе параметров, объявленных в методах.
Затем система внедрения зависимостей может посмотреть на метаданные параметра конструктора, чтобы выяснить, какие типы внедрять.
Все это включается специальными опциями компилятора машинописи
"emitDecoratorMetadata":true
это обычно настраивается в файле tsconfig.json.
Если для emitDecoratorMetadata не задано значение true, angular не может определить, что добавить в ваше приложение.
Если вы создаете свое приложение с угловым CLI. Эта опция включена (установлена в true) по умолчанию.
Метаданные будут отправляться только для службы или компонента, если у класса есть декоратор. Неважно, какой декоратор. Любой декоратор будет вызывать выброс метаданных. Вот почему мы добавляем декоратор Injectable() к сервисам, и нам не нужно добавлять его к компонентам, так как у них уже есть декоратор компонентов
Таким образом, система впрыска определяет, какой тип внедрить в конструктор компонента.
Метаданные декоратора необходимы, если вы хотите отразить метаданные во время выполнения.
Если вы этого не делаете, например, с помощью Reflect.metadata, это не повлияет на исключение вывода. По умолчанию, emitDecoratorMetadata
ложно Декораторы все еще работают, но информация времени разработки недоступна во время выполнения.