gpt4 book ai didi

javascript - 在 typescript、node 和 babel 中使用静态属性

转载 作者:行者123 更新时间:2023-11-30 11:50:46 25 4
gpt4 key购买 nike

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

import 'babel-polyfill';

class Test {
static name = 'abc';
}

它被 typescript 转译为

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

知道可能是什么错误吗?转译后的代码应该看起来不同(即我的 typescript 配置有问题)还是我错过了另一个 babel 插件?

最佳答案

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

Spec for property name of Function instances

从技术上讲,name 仍然可以替换,因为该属性是可配置的,因此可以用Object.defineOwnProperty 替换。这只是 transform-class-properties 将静态属性分配给构造函数的方式。它需要使用 Object.defineOwnProperty 而不仅仅是像那样进行赋值。

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

关于javascript - 在 typescript、node 和 babel 中使用静态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39561953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com