2015-12-01 16 views
9

Jestem całkiem nowym użytkownikiem TypeScript. Zacząłem od książki o nazwie Types Revealed (Pub Feb.2013). W rozdziale 2 znajduje się sekcja o nazwie „odlewnictwa”, który ma następujący przykład:Odlewanie typów maszynopisu nie działa

var a : int = <int>SomeNumberAsAString;

próbowałem zastosować przykład następująco:

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

Ale kompilator dał mi błąd:

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

Zastanawiam się, jak to zrobić, czy zmieniono specyfikację Maszynopisu?

+1

sugeruję naprawdę analizowania go w liczbie: 'var a: Number = parseInt (SomeNumberAsAString, 10);' –

+0

@NemanjaMiljkovic Dzięki, że nigdy nie będzie rzeczą użytkownik jak to w kodowaniu, to tylko dla cel nauki. – Kuan

Odpowiedz

18

(Pub Feb.2013)

Ta książka jest stary. Nazywa się teraz number.

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

Także to twierdzenie jest bardzo niebezpieczne i nie byłoby to zrobić w kodzie produkcji. Ale to dostaje punkt całej :)

Więcej

bardziej aktualne książki rozdziale dotyczącym twierdzeń: https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html

+0

Dzięki, ale nadal mam błąd w stylu: hello.ts (2,17): błąd TS2352: Ani typ "ciąg", ani typ "liczba" nie można przypisać drugiemu. – Kuan

+0

Zaktualizowany ... potrzebujesz "jakiegokolwiek" tam :) – basarat

+0

Zobacz "podwójne stwierdzenie" w rozdziale opublikowanym – basarat

3

czytałem @ odpowiedź basarat i postanowił pisać moje własne, ponieważ jestem przekonany, że jest jeszcze trochę miejsca na wyjaśnienia.

Ostrzegam, <number><any> rzutowanie nie wygeneruje liczby. W rzeczywistości pozwoli to na skompilowanie twojego kodu (w ten sposób przejdziesz wszystkie statyczne sprawdzania pisowni), ale nie będzie to liczba w javascript. Rozważmy następujący fragment kodu:

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 

Ledwo mogę sobie wyobrazić przypadki, kiedy a -case jest korzystna w porównaniu do b -case. Poszedłbym po prostu parseInt lub parseFloat lub Number, cokolwiek pasuje bardziej. <T><any> Rzutowanie wygląda na sprytne, ale musisz być w 100% pewien, co masz osiągnąć dzięki temu idiomowi.

A w większości przypadków prawdopodobnie nie chcą osiągnąć)

0

wolę ten wariant

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

0

Oto sposób najczystszych to zrobić.

const numberString = '1000'; 
const a: int = numberString as any;