使用带有typescript,node和babel的静态属性

时间:2016-09-18 19:46:56

标签: javascript node.js typescript babeljs

我正在尝试创建一个静态类属性

import 'babel-polyfill';

class Test {
  static name = 'abc';
}

通过打字稿到

进行分析
require("babel-polyfill");

class Test {
}
Test.name = 'abc';

现在,当我使用babel-node运行时,我得到了

TypeError: Cannot assign to read only property 'name' of function Test()

我的babelrc看起来像这样:

{
  "passPerPreset": true,
  "presets": [
    "react",
    "es2015",
    "stage-0"
  ],
  "plugins": ["transform-class-properties", "syntax-class-properties"]
}

知道可能是什么错误吗?如果发现的代码看起来不同(即我的打字稿配置有问题),还是我错过了另一个babel插件?

1 个答案:

答案 0 :(得分:2)

问题是您为该静态属性选择的名称。它与只读的函数(构造函数和类)的属性name冲突。

Spec for property name of Function instances

从技术上讲,name仍可以替换,因为该属性为configurable,因此可以将其替换为Object.defineOwnProperty。这就是transform-class-properties将静态属性分配给构造函数的方式。它需要使用Object.defineOwnProperty,而不仅仅是这样做。

老实说,最好不要将namelengthprototype作为静态类属性。