Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Typescript type casting not working

Tags:

I am pretty new to TypeScript. I started with a book called Typescript Revealed (Pub Feb.2013). In Chapter 2 there is a section called "Casts" that has the following example:

var a : int = <int>SomeNumberAsAString;

I tried to apply the example, as follows:

var SomeNumberAsAString = "1000"; var a: int = <int>SomeNumberAsAString; 

But compiler gave me an error:

hello.ts(2,8): error TS2304: Cannot find name 'int'.
hello.ts(2,15): error TS2304: Cannot find name 'int'.

I'm wondering how to do this cast, or has the specification of Typescript changed?

like image 253
Kuan Avatar asked Dec 01 '15 23:12

Kuan


2 Answers

(Pub Feb.2013)

That book is old. Its called number now.

var SomeNumberAsAString = "1000"; var a: number = <number><any>SomeNumberAsAString; 

Also this assertion is very unsafe and I would not do this in production code. But it gets the point across :)

More

A more up to date book chapter on assertions : https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html

like image 197
basarat Avatar answered Sep 20 '22 08:09

basarat


I've read @basarat's answer and decided to post my own since I strongly believe that there's still some room for explanation.

Be warned, <number><any> casting won't generate a number. In fact it will allow your code to be compiled (thus you'll pass all static typing checks) but it won't be a number in javascript. Consider this snippet of code:

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 

I hardly can imagine cases when a-case is beneficial compared to b-case. I'd go with just parseInt or parseFloat or Number, whatever fits more. <T><any> casting looks smart but you must be 100% sure what you are supposed to achieve by that idiom.

And in most cases you probably don't want to achieve that )

like image 20
shabunc Avatar answered Sep 21 '22 08:09

shabunc