我是TypeScript的新手。我开始写一本名为Typescript Revealed(Pub Feb.2013)的书。在第2章中有一个名为" Casts"具有以下示例:
var a : int = <int>SomeNumberAsAString;
我尝试应用该示例,如下所示:
var SomeNumberAsAString = "1000";
var a: int = <int>SomeNumberAsAString;
但编译器给了我一个错误:
hello.ts(2,8):错误TS2304:找不到名称&#39; int&#39;。
hello.ts(2,15):错误TS2304:找不到名称&#39; int&#39;。
我想知道如何进行此演员表,或者是否更改了Typescript的规范?
答案 0 :(得分:27)
(Pub Feb.2013)
那本书旧。它现在称为number
。
var SomeNumberAsAString = "1000";
var a: number = <number><any>SomeNumberAsAString;
此断言也非常不安全,我不会在生产代码中执行此操作。但它得到了重点:)
关于断言的更新的书籍章节:https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html
答案 1 :(得分:6)
我已经阅读了@ basarat的答案并决定发布我的答案,因为我坚信仍有一些解释空间。
警告,<number><any>
施法不会生成数字。实际上它将允许您的代码被编译(因此您将通过所有静态类型检查)但它不会是javascript中的数字。请考虑以下代码段:
let str = "1000";
let a: number = <number><any>str;
let b: number = parseInt(str); //or just let b = parseInt(str)
console.log(typeof a); // string
console.log(typeof b); // number
我很难想象a
案例与b
相比案例有益的案例。我只使用parseInt或parseFloat或Number,无论多适合什么。 <T><any>
施法看起来很聪明,但你必须100%确定你应该用这个成语来实现什么。
在大多数情况下,你可能不希望实现这一点)
答案 2 :(得分:1)
我更喜欢这种变体
let SomeNumberAsAString = '1000';
let a = +SomeNumberAsAString;
console.log(a);
&#13;
答案 3 :(得分:1)
这是最干净的方式。
this->time = time;
this->next = next;
答案 4 :(得分:0)
const a: number = <number> +SomeNumberAsAString;
+SomeNumberAsAString
将字符串值转换为数字。
<number>
之前, +SomeNumberAsAString
对Typescript编译器说,我们需要将值的类型强制转换为类型number
。