类具有静态成员`name`时的TypeError

Snæ*_*ørn 3 javascript typescript

我有以下TypeScript类

module Test {
    "use strict";

    class Foo {
        public static name = "foo";
    }
}
Run Code Online (Sandbox Code Playgroud)

很简单.

但是在Chrome中运行时出现以下错误:

未捕获的TypeError:无法分配给函数'function Foo(){}'的只读属性'name'

这是生成的javascript:

var Test;
(function (Test) {
  "use strict";
  var Foo = (function () {
    function Foo() {
    }
    Foo.name = "foo";
    return Foo;
  }());
})(Test || (Test = {}));
Run Code Online (Sandbox Code Playgroud)

如果我使用不同的名称,那么name我不会收到错误.

module Test {
    "use strict";

    class Foo {
        public static huh = "foo";
    }
}
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?

Dyl*_*eus 5

问题似乎是你正在尝试写信Function.name.在最初编写的代码中,您可以在编译的代码中看到您正在更改的代码Foo.name.

考虑一下这段代码

  function Foo(){}
  console.log(Foo.name); // prints 'Foo'
Run Code Online (Sandbox Code Playgroud)

该错误是因为您尝试更改此函数的属性,并且不允许这样做(read-only property ..).有关您不被允许这样做的原因(以及如何)的更多信息可以在这里找到.感谢@ssube在评论中提供此链接

因此,虽然您没有自己创建该属性,但您的所有功能实际上都拥有它.您可以查看此页面以获取更多信息.