2013-04-07 50 views
0

以下打字稿代码生成一个运行时错误:尾随逗号禁用类型检查?

var ns: number[] = ['1',]; 
alert('' + ns[0].toFixed()); 

据我所知,因为数组文本输入得到了any[]分配是好的。但为什么它首先是any[]

是在语言规范描述的任何地方这后面的逗号行为?

回答

1

数组文本可以包含未定义的项目,例如:

var a = [,"1",,"3",,,"6"]; 

作为该创建与类型stringundefined的值的数组,在打字稿的类型将是any处理两者。

具有该阵列在一个单一的结尾逗号实际上将不会在最后创建未定义的值,也就是用javascript怪癖之一。所以,在你的情况下,实际的数组只有单个字符串,TypeScript可以使用类型string[]作为数组,但我猜测TypeScript不能处理这个特殊的问题。

+0

它为什么突然让'undefined'?尝试Chrome/Node:'['1',] => ['1']'(长度1),'['1',] => ['1',undefined]'(长度2);即首先没有未定义的元素。 – coudy 2013-04-07 11:41:55

+1

@coudy:是的,这就是Javascript的行为。最后一个未定义的项目被忽略,这可能是因为在最后偶然添加的单个尾随逗号不应产生未定义的值。 – Guffa 2013-04-07 11:47:06

+0

感谢您的编辑,听起来更有可能。所以,由于尾随逗号不会改变数组的内容,但会产生非常令人惊讶且难以检测的输入问题(除了对干净的差异有用之外),我认为这是一个TS错误。 – coudy 2013-04-07 11:48:01