打字稿类型转换不起作用

时间:2015-12-01 23:34:52

标签: casting typescript

我是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的规范?

5 个答案:

答案 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)

我更喜欢这种变体

&#13;
&#13;
let SomeNumberAsAString = '1000';
let a = +SomeNumberAsAString;
console.log(a);
&#13;
&#13;
&#13;

答案 3 :(得分:1)

这是最干净的方式。

this->time = time;
this->next = next;

答案 4 :(得分:0)

const a: number = <number> +SomeNumberAsAString;

+SomeNumberAsAString将字符串值转换为数字。

<number>之前,

+SomeNumberAsAString对Typescript编译器说,我们需要将值的类型强制转换为类型number