Compile ES2015 computed properties to ES5
npm install babel-plugin-transform-es2015-computed-properties> Compile ES2015 computed properties to ES5
In
``js`
var obj = {
["x" + foo]: "heh",
["y" + bar]: "noo",
foo: "foo",
bar: "bar"
};
Out
`js
var _obj;
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
var obj = (
_obj = {},
_defineProperty(_obj, "x" + foo, "heh"),
_defineProperty(_obj, "y" + bar, "noo"),
_defineProperty(_obj, "foo", "foo"),
_defineProperty(_obj, "bar", "bar"),
_obj
);
`
`sh`
npm install --save-dev babel-plugin-transform-es2015-computed-properties
.babelrc
Without options:
`json`
{
"plugins": ["transform-es2015-computed-properties"]
}
With options:
`json`
{
"plugins": [
["transform-es2015-computed-properties", {
"loose": true
}]
]
}
`sh`
babel --plugins transform-es2015-computed-properties script.js
`javascript`
require("babel-core").transform("code", {
plugins: ["transform-es2015-computed-properties"]
});
boolean, defaults to false
Just like method assignment in classes, in loose mode, computed property names
use simple assignments instead of being defined. This is unlikely to be an issue
in production code.
#### Example
In
`js`
var obj = {
["x" + foo]: "heh",
["y" + bar]: "noo",
foo: "foo",
bar: "bar"
};
Out
`js
var _obj;
var obj = (
_obj = {},
_obj["x" + foo] = "heh",
_obj["y" + bar] = "noo",
_obj.foo = "foo",
_obj.bar = "bar",
_obj
);
``