Typescript typkonvertering fungerar inte


Jag är ganska ny på TypeScript. Jag började med en bok som heter TypeScript Revealed (pub feb. 2013). I kapitel 2 finns det en sektion som kallas "Casts" som har följande exempel:

var a : int = <int>SomeNumberAsAString;

Jag försökte tillämpa exemplet, på följande sätt:

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

Men kompilatorn gav mig ett fel:

hello.ts(2,8): fel TS2304: Kan inte hitta namnet 'int'.
hello.ts(2,15): fel TS2304: Kan inte hitta namnet 'int'.

Jag undrar hur man gör den här typomvandlingen, eller har specifikationen för Typescript ändrats?

Svar #1

(Publicerad feb. 2013)

Den boken är gammal. Den kallas nummer nu.

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

Denna påstående är också mycket osäker och jag skulle inte göra detta i produktionskod. Men det förmedlar poängen :)

Mer

Ett mer uppdaterat bokkapitel om påståenden: https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html https://basarat.gitbook.io/typescript/type-system/type-assertion

Svar #2

Jag har läst @basarat:s svar och bestämde mig för att posta mitt eget eftersom jag starkt tror att det fortfarande finns utrymme för förklaring.

Var försiktig, <number><any>-typomvandling kommer inte att generera ett nummer. Faktum är att det tillåter din kod att kompileras (så att du passerar alla statiska typkontroller) men det kommer inte att vara ett nummer i JavaScript. Överväg detta kodexempel:

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

Jag kan knappt föreställa mig fall där a-fallet är fördelaktigt jämfört med b-fallet. Jag skulle välja att bara använda parseInt eller parseFloat eller Number, vilket som passar bäst. <T><any>-typomvandling ser smart ut men du måste vara 100% säker på vad du faktiskt ska uppnå med det idiomet.

Och i de flesta fall vill du förmodligen inte uppnå det )

Relaterade artiklar