打字稿类型转换不起作用

Kua*_*uan 15 casting typescript

我是TypeScript的新手.我开始写一本名为Typescript Revealed(Pub Feb.2013)的书.在第2章中有一个名为"Casts"的部分,其中包含以下示例:

var a : int = <int>SomeNumberAsAString;

我试着应用这个例子,如下:

var SomeNumberAsAString = "1000";
var a: int = <int>SomeNumberAsAString;
Run Code Online (Sandbox Code Playgroud)

但编译器给了我一个错误:

hello.ts(2,8):错误TS2304:找不到名称'int'.
hello.ts(2,15):错误TS2304:找不到名称'int'.

我想知道如何进行此演员表,或者是否更改了Typescript的规范?

bas*_*rat 29

(Pub 2月2013)

那本书很.它number现在叫.

var SomeNumberAsAString = "1000";
var a: number = <number><any>SomeNumberAsAString;
Run Code Online (Sandbox Code Playgroud)

此断言也非常不安全,我不会在生产代码中这样做.但它得到了重点:)

更多

有关断言的最新书籍章节:https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html


sha*_*unc 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
Run Code Online (Sandbox Code Playgroud)

我几乎无法想象 - ab-case 相比,-case 是有益的.我只使用parseInt或parseFloat或Number,无论多适合什么.<T><any>铸造看起来很聪明,但你必须100%确定你应该通过这个成语实现什么.

在大多数情况下,你可能不希望实现这一点)