Types primitifs typescripts: toute différence entre les types “nombre” et “nombre” (est-ce que TSC est insensible à la casse)?

Je voulais écrire un paramètre de type number , mais j’ai mal orthographié le type, en écrivant plutôt Number .

Sur mon IDE (JetBrains WebStorm), le type Number est écrit avec la même couleur que celle utilisée pour le number type primitif, alors que si j’écris un nom de classe (connu ou inconnu), il utilise une couleur différente. il reconnaît le type mal orthographié comme un type correct / presque correct / type de correct.

Lorsque je comstack le code, au lieu de se plaindre par exemple que le compilateur n’a pas pu trouver une classe nommée Number , TSC écrit ce message d’erreur:

 Illegal property access 

Est-ce que cela signifie que le number et le Number coexistent sous des types différents?

Si cela est vrai, quelle est la différence entre ces classes?

Si ce n’est pas le cas, alors pourquoi il n’a simplement pas écrit le même message d’erreur qu’il affiche pour les classes inconnues (“Le nom” Number “n’existe pas dans la scope actuelle”)

Ceci est le code:

 class Test { private myArray:ssortingng[] = ["Jack", "Jill", "John", "Joe", "Jeff"]; // THIS WORKS public getValue(index:number):ssortingng { return this.myArray[index]; } // THIS DOESN'T WORK: ILLEGAL PROPERTY ACCESS public getAnotherValue(index:Number):ssortingng { return this.myArray[index]; } } 

JavaScript a la notion de types primitifs (nombre, chaîne, etc.) et de types d’ object (Number, Ssortingng, etc., qui sont manifestes à l’exécution). Les types et les number type TypeScript y font respectivement référence. JavaScript contraindra généralement un type d’object à son équivalent primitif, ou vice versa:

 var x = new Number(34); > undefined x > Number {} x + 1 > 35 

Les règles système de type TypeScript traitent de ceci (section de spécification 3.7) comme ceci:

Pour déterminer les relations de compatibilité de sous-type, de supertype et d’affectation, les types primitifs Number, Boolean et Ssortingng sont traités comme des types d’object ayant les mêmes propriétés que les interfaces ‘Number’, ‘Boolean’ et ‘Ssortingng’, respectivement.

Pour augmenter la réponse de Ryan avec les conseils de la tâche à faire et à ne pas faire dans TypeScript :

N’utilisez jamais les types Number, Ssortingng, Boolean ou Object. Ces types font référence à des objects encadrés non primitifs qui ne sont presque jamais utilisés de manière appropriée dans le code JavaScript.

 /* WRONG */ function reverse(s: Ssortingng): Ssortingng; 

Utilisez les types number, ssortingng et boolean.

 /* OK */ function reverse(s: ssortingng): ssortingng;