你如何指定一个类属性是一个整数?

我正在试验TypeScript,并在创build一个“ID”字段应该是一个整数的类的过程中,我有点困惑。

首先,在带有TypeScript插件的Visual Studio 2012中,我在智能列表types中看到“int”。 但是我得到一个编译错误,说“名字'int'在当前作用域中不存在”。

我回顾了语言规范,只看到以下基本types:数字,string,布尔值,空值和未定义。 没有整数types。

所以,我只剩下两个问题:

  1. 我应该如何向我的class级的用户指出一个特定的字段不仅是一个“数字”,而是一个整数(而不是一个浮点数或十进制数)?

  2. 为什么我在智能感知列表中看到“int”,如果它不是一个有效的types?

更新:到目前为止我所得到的所有答案都是关于JavaScript如何不具有inttypes的,在运行时很难强制inttypes…我知道所有这一切。 我问是否有一种TypeScript方法来为我的类的用户提供注释,该字段应该是一个整数。 也许是对某种格式的评论?

  1. 我认为没有一个直接的方法来指定一个数字是整数还是浮点数。 在TypeScript规范3.2.1节中我们可以看到:

    “… Number基本types对应于类似名称的JavaScript基本types,并表示双精度64位格式IEEE 754浮点值…”

  2. 我认为int是Visual Studio智能感知中的一个错误。 正确的是number

TypeScript是JavaScript的超集,它没有int的概念。 它只有一个数字的概念,它有一个浮点数。

从哲学上讲,编译器只需要为TypeScript inttypes强制执行整个数字就可以做的工作量可能很大,在某些情况下,仍然无法在编译时确保只分配整个数字,这就是为什么不可能可靠地将一个int添加到TypeScript中。

当你最初在Visual Studio中获得智能时,工具不可能决定提供什么东西,所以你得到了一切,包括int – 但是一旦你处理了一些已知types的东西,你将会得到明智的智能感知。

例子

 var myInt: number; var myString: string; myInt. // toExponential, toFixed, toPrecision, toString myString. // charAt, charCodeAt, concat, indexOf, lastIndexOf, length and many more... 

那么,正如你所看到的,打字稿没有浮动数据types,如JavaScript语言。 只有同时覆盖所有intdoublenumber ; 也许你必须做一个函数,获取一个数字,并检查它是否是一个intdouble ,通过返回一些错误/成功的情况下。 像这样的东西你的类的方法:

 function SetN(x:number) { var is_int = parseInt(x) === parseFloat(x); if(is_int) this.n = x; return is_int; } //.. y = 10.5; if(SetN(y)) { //OK } else { //error not set y isn't a int } 

注意:它不适用于10.0如果你不想要它,也许你必须把它转换成string,并试图find一个.

如果我没有记错(和我)int是保留在JavaScript(ECMAScript,如果你喜欢)未来使用的关键字。 |但它现在是一个有效的types(“现在”就像在“最新规范”)。 :)在262它仍然是保留, publications/files/ECMA-ST/Ecma-2622.html

无论如何,这将是好的除了打字稿有int数据types实现浮动点在代码隐藏,但所有编译时types检查和转换规则可用。

这是一个不做拳击的数字接口的实现 。 我认为可以使用这种devise来创build一个Integertypes