web-dev-qa-db-fra.com

Le typage typographique ne fonctionne pas

Je suis assez nouveau pour TypeScript. J'ai commencé avec un livre intitulé TypeScript Revealed (Pub Feb.2013). Au chapitre 2, vous trouverez une section intitulée "Distribution" qui présente l'exemple suivant:

var a : int = <int>SomeNumberAsAString;

J'ai essayé d'appliquer l'exemple, comme suit:

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

Mais le compilateur m'a donné une erreur:

hello.ts (2,8): erreur TS2304: impossible de trouver le nom 'int'.
hello.ts (2,15): erreur TS2304: impossible de trouver le nom 'int'.

Je me demande comment faire cette distribution, ou la spécification de TypeScript a-t-elle changé?

12
Kuan

(Pub fév.2013)

Ce livre est old. Son appelé number maintenant. 

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

De plus, cette assertion est très dangereuse et je ne le ferais pas dans le code de production. Mais ça passe le message :)

Plus

Un chapitre de livre plus à jour sur les assertions: https://basarat.gitbooks.io/TypeScript/content/docs/types/type-assertion.html

25
basarat

J'ai lu la réponse de @ basarat et décidé d'afficher la mienne, car je suis fermement convaincue qu'il y a encore matière à explication.

Soyez averti, <number><any> casting ne générera pas de nombre. En fait, cela permettra à votre code d'être compilé (vous passerez ainsi toutes les vérifications de frappe statiques), mais ce ne sera pas un nombre en javascript. Considérez cet extrait de 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

Je peux difficilement imaginer des cas où a- cas est bénéfique par rapport à b- cas. J'irais simplement avec parseInt ou parseFloat ou Number, ce qui convient davantage. <T><any> casting semble intelligent, mais vous devez être sûr à 100% de ce que vous êtes censé atteindre par cet idiome.

Et dans la plupart des cas, vous ne voulez probablement pas atteindre cet objectif)

5
shabunc

Voici le le plus propre moyen de le faire.

const numberString = '1000';
const a: int = numberString as any;
1
Ash Blue

Je préfère cette variante

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

1
Lonli-Lokli
const a: number = <number> +SomeNumberAsAString;

+SomeNumberAsAString convertit la valeur de la chaîne en nombre.

<number> avant +SomeNumberAsAString indique au compilateur TypeScript qu'il est nécessaire de convertir le type de la valeur en type number

0
Alex Chaliy