emitDecoratorMetadata и его важность в передаваемом коде

Мне любопытно о важности emitDecoratorMetadata возможность переноса TS в JS (в контексте Angular 2). Если задано значение false и метаданные не будут включены в полученный код, какой эффект это даст?

Благодарю.

2 ответа

Вот сценарий, с которым я столкнулся, читая...

Инжекторы используют вывод метаданных компилятором машинописи, чтобы определить, какие типы сервисов запрашиваются компонентом. Метаданные выводят информацию о количестве и типе параметров, объявленных в методах.

Затем система внедрения зависимостей может посмотреть на метаданные параметра конструктора, чтобы выяснить, какие типы внедрять.

Все это включается специальными опциями компилятора машинописи

"emitDecoratorMetadata":true

это обычно настраивается в файле tsconfig.json.

Если для emitDecoratorMetadata не задано значение true, angular не может определить, что добавить в ваше приложение.

Если вы создаете свое приложение с угловым CLI. Эта опция включена (установлена ​​в true) по умолчанию.

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

Таким образом, система впрыска определяет, какой тип внедрить в конструктор компонента.

Метаданные декоратора необходимы, если вы хотите отразить метаданные во время выполнения.

Если вы этого не делаете, например, с помощью Reflect.metadata, это не повлияет на исключение вывода. По умолчанию, emitDecoratorMetadata ложно Декораторы все еще работают, но информация времени разработки недоступна во время выполнения.

Другие вопросы по тегам