Quelqu'un connaît-il la différence entre String et string en TypeScript? Ai-je raison de supposer qu'ils devraient être les mêmes?
var a: String = "test";
var b: string = "another test";
a = b;
b = a; // this gives a compiler error!
La version actuelle du compilateur dit:
Type 'String' is not assignable to type 'string'.
'string' is a primitive, but 'String' is a wrapper object.
Prefer using 'string' when possible.
Est-ce un bug?
typescript
Paul0515
la source
la source
Réponses:
Voici un exemple qui montre les différences, ce qui aidera à l'explication.
String
est le type de chaîne JavaScript, que vous pouvez utiliser pour créer de nouvelles chaînes. Personne ne fait cela car en JavaScript les littéraux sont considérés comme meilleurs, doncs2
dans l'exemple ci-dessus crée une nouvelle chaîne sans utiliser lenew
mot - clé et sans utiliser explicitement l'String
objet.string
est le type de chaîne TypeScript, que vous pouvez utiliser pour saisir des variables, des paramètres et des valeurs de retour.Notes complémentaires...
Actuellement (février 2013) Les deux
s1
ets2
sont valides JavaScript.s3
est un TypeScript valide.Utilisation de
String
. Vous n'avez probablement jamais besoin de l'utiliser, les littéraux de chaîne sont universellement acceptés comme étant la bonne façon d'initialiser une chaîne. En JavaScript, il est également préférable d'utiliser également les littéraux d'objet et les littéraux de tableau:Si vous aviez vraiment un penchant pour la chaîne, vous pouvez l'utiliser dans TypeScript de deux manières ...
la source
string
type et une initialisation littérale:var s: string = "My String";
.var s: string = "My String"
est identique àvar s = "My String"
... aussi, peu importe combien de fois j'ai lu cette réponse, je ne comprends toujours pas le but dustring
type dans TypeScript, car, à la fin de la journée ,('My String')['constructor'] === String
...Les deux types sont distincts en JavaScript ainsi que TypeScript - TypeScript nous donne juste la syntaxe pour annoter et vérifier les types au fur et à mesure.
String
fait référence à une instance d'objet qui aString.prototype
dans sa chaîne de prototype. Vous pouvez obtenir une telle instance de différentes manières, par exemplenew String('foo')
etObject('foo')
. Vous pouvez tester une instance duString
type avec l'instanceof
opérateur, par exemplemyString instanceof String
.string
est l'un des types primitifs de JavaScript, et lesstring
valeurs sont principalement créées avec des littéraux, par exemple'foo'
et"bar"
, et comme type de résultat de diverses fonctions et opérateurs. Vous pouvez tester lestring
type à l'aide detypeof myString === 'string'
.La grande majorité du temps,
string
c'est le type que vous devriez utiliser - presque toutes les interfaces API qui prennent ou retournent des chaînes l'utiliseront. Tous les types primitifs JS seront enveloppés ( encadrés ) avec leurs types d'objets correspondants lors de leur utilisation en tant qu'objets, par exemple en accédant à des propriétés ou en appelant des méthodes. CommeString
est actuellement déclaré comme une interface plutôt qu'une classe dans la bibliothèque principale de TypeScript , le typage structurel signifie qu'ilstring
est considéré comme un sous-type,String
c'est pourquoi votre première ligne passe les vérifications de type de compilation.la source
En JavaScript, les chaînes peuvent être de type primitif de chaîne ou des objets de chaîne. Le code suivant montre la distinction:
Votre erreur:
Est levé par le compilateur TS parce que vous avez essayé d'affecter le type
string
à un type d'objet chaîne (créé via unnew
mot clé). Le compilateur vous indique que vous devez utiliser le typestring
uniquement pour les types primitifs de chaînes et que vous ne pouvez pas utiliser ce type pour décrire les types d'objets chaîne.la source
TypeScript:
String
vsstring
démo
la source
Pour les lecteurs rapides:
Ne jamais utiliser les types numériques, cordes , booléennes, Symbole, ou un objet Ces types se réfèrent à des objets non primitifs en boîte qui sont presque jamais utilisés de façon appropriée dans le code JavaScript.
la source