我正在尝试创建一个静态类属性
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插件?
答案 0 :(得分:2)
问题是您为该静态属性选择的名称。它与只读的函数(构造函数和类)的属性name
冲突。
Spec for property name
of Function instances
从技术上讲,name
仍可以替换,因为该属性为configurable
,因此可以将其替换为Object.defineOwnProperty
。这就是transform-class-properties
将静态属性分配给构造函数的方式。它需要使用Object.defineOwnProperty
,而不仅仅是这样做。
老实说,最好不要将name
,length
和prototype
作为静态类属性。