babel-plugin-transform-typescript-metadata weekly downloads statistics
By leonardfactory · npm · Babel plugins
Babel plugin to emit decorator metadata like typescript compiler
babel-plugin-transform-typescript-metadata has 2,732,047 recorded weekly downloads on npm, a decrease of 35.9% over the past 30 days, ranking #151 of 2,322 tracked listings.
About babel-plugin-transform-typescript-metadata
babel-plugin-transform-typescript-metadata
Babel plugin to emit decorator metadata like typescript compiler
Motivation
TypeScript Decorators allows advanced reflection patterns when combined
with Reflect.metadata output.
Current @babel/preset-typescript implementation however just strips all types and
does not emit the relative Metadata in the output code.
Since this kind of information is used extensively in libraries like
Nest and TypeORM
to implement advanced features like Dependency Injection, I've thought it would
be awesome to be able to provide the same functionality that TypeScript
compiler experimentalDecorators and emitDecoratorMetadata
flags provide.
This means that code like:
import { Injectable, Inject } from 'some-di-library'; // Just an example
import { MyService } from './MyService';
import { Configuration } from './Configuration';
@Injectable()
class AnotherService {
@Inject()
config: Configuration;
constructor(private service: MyService) {}
}
will be interpreted like:
import { MyService } from './MyService';
import { Configuration } from './Configuration';
@Injectable()
@Reflect.metadata('design:paramtypes', [MyService])
class AnotherService {
@Inject()
@Reflect.metadata('design:type', Configuration)
config: Configuration;
constructor(private service: MyService) {}
}
Parameter decorators
Since decorators in typescript supports also Parameters, this plugin also provides support for them, enabling the following syntax:
@Injectable()
class Some {
constructor(@Inject() private: SomeService);
}
This will be roughly translated to:
// ...
Inject()(Some.prototype, undefined, 0);
Installation
With npm:
npm install --dev --save babel-plugin-transform-typescript-metadata
or with Yarn:
yarn add --dev babel-plugin-transform-typescript-metadata
Usage
With .babelrc:
Note: should be placed before
@babel/plugin-proposal-decorators.
{
"plugins": [
"babel-plugin-transform-typescript-metadata",
["@babel/plugin-proposal-decorators", { "legacy": true }],
["@babel/plugin-proposal-class-properties", { "loose": true }],
],
"presets": [
"@babel/preset-typescript"
]
}
Usage with InversifyJS
If you are using normal dependency injection letting Inversify create your instances, you should be fine with all kind of decorators.
Instead, if you are using property injection, when the container does not create the instances, you would likely encounter errors since babel decorators are not exactly the same as TypeScript.
You can fix it by enhancing property decorators with the following function:
import getDecorators from 'inversify-inject-decorators';
// setup the container...
let { lazyInject: originalLazyInject } = getDecorators(container);
// Additional function to make properties decorators compatible with babel.
function fixPropertyDecorator<T extends Function>(decorator: T): T {
return ((...args: any[]) =>
(target: any, propertyName: any, ...decoratorArgs: any[]) => {
decorator(...args)(target, propertyName, ...decoratorArgs);
return Object.getOwnPropertyDescriptor(target, propertyName);
}) as any;
}
export const lazyInject = fixPropertyDecorator(originalLazyInject);
Current Pitfalls
-
If you are using webpack and it complains about missing exports due to types not being removed, you can switch from
import { MyType } from ...toimport type { MyType } from .... See #46 for details and examples. -
We cannot know if type annotations are just types (i.e.
IMyInterface) or concrete values (like classes, etc.). In order to resolve this, we emit the following:typeof Type === 'undefined' ? Object : Type. The code has the advantage of not throwing. If you know a better way to do this, let me know!
Description from the npm listing.
- babel
- babel-plugin
- babel-typescript
- decorators
- reflect-metadata
README badge
Show your rank in a README or on your website. The badge updates automatically.
Charts
Images: 30d · 1y · all time · 1600×900 dark
Adoption over time
7/30/90-day growth
Ranking history
Listing placement
Listing placement
Filled points are observed values; hollow points come from Internet Archive snapshots of the listing page. Dashed segments span periods with no observations — values between points are not interpolated.
Each band is one page of 20. Weekly downloads on a linear scale. Placement is projected from weekly downloads, so it can differ from the marketplace's own sort order. Hover a dot to see the listing.
Recent observations
Full history (122)Similar npm Babel plugins plugins
All 20 babel-plugin-transform-typescript-metadata alternativesData source
Weekly downloads (trailing 7 complete days) come from the official npm downloads API. Downloads include CI and mirrors and are not equivalent to installs or users. npm publishes no ratings.
Listing: https://www.npmjs.com/package/babel-plugin-transform-typescript-metadata. First seen Oct 16, 2026; last successful collection Oct 20, 2026. See the methodology.