类有静态成员' name '时出现类型错误
TypeError when class has static member `name`
我有以下的TypeScript类
module Test {
"use strict";
class Foo {
public static name = "foo";
}
}
相当简单。
但是当在Chrome中运行时,我得到以下错误:
下面是生成的javascript:未捕获的类型错误:不能分配给函数'function Foo(){}'的只读属性'name'
var Test;
(function (Test) {
"use strict";
var Foo = (function () {
function Foo() {
}
Foo.name = "foo";
return Foo;
}());
})(Test || (Test = {}));
如果我使用不同的名称,那么name
,我不会得到错误。
module Test {
"use strict";
class Foo {
public static huh = "foo";
}
}
怎么回事?
问题似乎是您试图写Function.name
。在您最初编写的代码中,您可以在编译后的代码中看到您正在更改Foo.name
。
考虑以下代码
function Foo(){}
console.log(Foo.name); // prints 'Foo'
这个错误是因为你试图改变这个函数的属性,并且不允许这样做(read-only property ..
)。关于为什么(以及如何)不允许这样做的更多信息可以在这里找到。感谢@ ssubbe在评论中提供这个链接
因此,虽然您没有自己创建该属性,但您的所有函数实际上都具有该属性。你可以查看这个页面了解更多信息。
问题是Foo.name = "foo";
,因为name是javascript中函数的预定义属性(如arguments, length等),它包含函数的名称(在您的情况下为'Foo'),因此您不能用自己的定义重写它
详情请看Mozilla的MDN
相关文章:
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- 未捕获的类型错误:无法读取属性'删除'的未定义
- 未捕获的类型错误:无法读取属性'name'即使它存在,也无法定义
- 看到“;未捕获的类型错误:无法读取属性'weight'未定义的“;尽管按照字面上的指示
- Soundcloud api"未捕获的类型错误:无法读取属性'uri'“未定义”;
- 未捕获的类型错误:无法读取属性'addEventListener'的null chrome扩展名
- 如何解决这种情况下的非法调用类型错误
- 未捕获的类型错误:$(..).dataTable不是函数
- 未捕获的类型错误:无法读取属性'状态'在react中为null
- 未捕获的类型错误:topFrame.window.changeSelectedBarStyle不是函数,原因是什么
- 类型错误:url未定义extjs 4正在填充组合框
- 未捕获的类型错误:无法读取属性'中止'的未定义
- 类型错误'未定义'不是对象(正在评估'navigator.connection.type'
- 未捕获的类型错误:无法设置属性'innerHTML'如果为null,则将脚本移动到正文不会;不起作用
- 未捕获的类型错误:undefined不是函数$
- 输入类型文件的未捕获类型错误
- 未捕获的类型错误:无法设置属性'背景'的未定义
- "未捕获类型错误/丢弃意外“;因为一句台词而出现?(HTML w/<脚本>)
- Javascript未捕获类型错误:无法读取属性'0'的未定义