2016-09-18 56 views
0

我想創建一個靜態類屬性使用具有打字稿,節點和巴貝爾

import 'babel-polyfill'; 

class Test { 
    static name = 'abc'; 
} 

它獲取由打字稿,當我運行這個使用babel- transpilled到

require("babel-polyfill"); 

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

現在的靜態屬性節點,我得到

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"] 
} 

任何想法可能是什麼錯誤?如果transpilled代碼看起來不同(即我的打字機配置有問題)還是缺少另一個babel插件?

回答

1

問題是您爲該靜態屬性選擇的名稱。它與只讀的函數(構造函數和類)的屬性name相沖突。

Spec for property name of Function instances

技術上,name仍然可以被替換,因爲該屬性是configurable,因此它可與Object.defineOwnProperty更換。這只是transform-class-properties分配靜態屬性到構造函數的方式。它需要使用Object.defineOwnProperty而不只是做這樣的任務。

老實說,如果您避免name,lengthprototype作爲靜態類屬性,那將是最好的。

+0

非常感謝@MinusFour! – Tim