为什么要取消TypeScript中禁止的功能?

时间:2014-07-28 18:15:29

标签: typescript

考虑:

function a() { a = null; }

为什么不能分配?

2 个答案:

答案 0 :(得分:4)

这里的规范似乎相当严格,但是函数定义表现得非常奇怪,所以这是可以理解的。 (也就是说,你可以在源代码中提前调用它们而不是声明它们......奇怪!)

只能分配引用表达式,在Section 4 of the spec中定义为:

  

...引用是标识符(第4.3节),括号(第4.7节)和属性访问(第4.10节)的组合。

和4.3,

  

引用变量或参数的标识符表达式被分类为引用。引用任何其他类型实体的标识符表达式被分类为值(因此不能是赋值的目标)。

因此,您可以将它从函数定义更改为变量声明,可能对代码的其余部分几乎没有任何更改:

var foo = function() {
    foo = null;
}

答案 1 :(得分:1)

TypeScript不允许对已声明的函数进行赋值,因为正如您在评论中看到的那样,故意这样做是非常罕见的。您实际上想要覆盖已声明的函数的可能性更大(您打算分配给aa而不是a)。