ES7 decorators for CoffeeScript
Libraries such as Angular and Aurelia are starting to use decorators according to the API proposed in https://github.com/wycats/javascript-decorators which is supported in Babel 5+ and TypeScript 1.5
On the other hand, it seems CoffeeScript won't be adding decorators any time soon:
es-decorate
fills the syntactic gap providing a
helper function that can apply decorators compliant
with the proposed decorator API.
npm install --save es-decorate
Following the examples in https://github.com/wycats/javascript-decorators:
decorate = require 'es-decorate'
# Class decorator must be assigned to variable or property.
Foo = decorate F('color'), G, class # Class name is optional in CoffeeScript
# Method with redundant name
bar: decorate 'bar', @, F('color'), G, ->
# Or just...
decorate 'baz', @, F('color'), G, ->
# ...if no code analyzer will miss the explicit method declaration
Multiline declaration:
Foo = decorate [
F 'color'
G
H
I 123
J
], class Foo
Less dumb example, using Angular 2:
decorate = require 'es-decorate'
{Component, View} = require 'angular2/angular2'
AppComponent = decorate [
Component selector: 'my-app'
View template: '<h1>My first Angular 2 App</h1>'
], class AppComponent
constructor: ->