@Input / @Output @Component({ selector: 'ng2-markdown', inputs: [ 'source' ], outputs: [ 'modified' ] }) export class MyComponent { constructor () { this.modified = new EventEmitter(); } ngOnInit() { console.log(this.source); } } Dependency Injection class AppComponent { static get parameters() { return [[CityService]]; } constructor(cityService) { this._cityService = cityService; } } ES6+ (more TypeScript alike) { "presets": ["es2015"], "plugins": [ "angular2-annotations", "transform-decorators-legacy", "transform-flow-strip-types", "transform-class-properties", "transform-flow-strip-types" ] } // use is as follow class MyComponent { @Input() item; @Output() itemModified = new EventEmitter(); _cityService = null; constructor(cityService: CityService) { this._cityService = cityService; } }