Qualcuno conosce la differenza tra String e string in TypeScript? Ho ragione nell’assumere che dovrebbero essere uguali?
var a: String = "test"; var b: string = "another test"; a = b; b = a; // this gives a compiler error!
La versione corrente del compilatore dice:
Type 'String' is not assignable to type 'string'. 'string' is a primitive, but 'String' is a wrapper object. Prefer using 'string' when possible.
È un bug?
Ecco un esempio che mostra le differenze, che aiuteranno nella spiegazione.
var s1 = new String("Avoid newing things where possible"); var s2 = "A string, in TypeScript of type 'string'"; var s3: string;
String
è il tipo di stringa JavaScript, che è ansible utilizzare per creare nuove stringhe. Nessuno lo fa come in JavaScript, i letterali sono considerati migliori, quindi s2
nell’esempio sopra crea una nuova stringa senza l’uso della new
parola chiave e senza utilizzare esplicitamente l’object String
.
string
è il tipo di stringa TypeScript, che è ansible utilizzare per digitare variabili, parametri e valori restituiti.
Note aggiuntive…
Attualmente (febbraio 2013) Entrambi s1
e s2
sono JavaScript validi. s3
è valido TypeScript.
Uso di String
. Probabilmente non avrai mai bisogno di usarlo, i letterali stringa sono universalmente accettati come il modo corretto per inizializzare una stringa. In JavaScript, è anche meglio utilizzare i letterali degli oggetti e gli array letterali:
var arr = []; // not var arr = new Array(); var obj = {}; // not var obj = new Object();
Se hai davvero un debole per la stringa, puoi usarla in TypeScript in due modi …
var str: String = new String("Hello world"); // Uses the JavaScript String object var str: string = String("Hello World"); // Uses the TypeScript string type
I due tipi sono distinti sia in JavaScript che in TypeScript – TypeScript ci fornisce solo la syntax per annotare e controllare i tipi mentre procediamo.
String
fa riferimento a un’istanza dell’object che ha String.prototype
nella sua catena di prototipi. È ansible ottenere una tale istanza in vari modi, ad esempio new String('foo')
e Object('foo')
. È ansible verificare un’istanza del tipo String
con l’operatore instanceof
, ad esempio myString instanceof String
.
string
è uno dei tipi primitivi di JavaScript e string
valori string
vengono creati principalmente con valori letterali come 'foo'
e "bar"
e come tipo di risultato di varie funzioni e operatori. È ansible verificare il tipo di string
usando typeof myString === 'string'
.
La stragrande maggioranza delle volte, la string
è il tipo che dovresti usare – quasi tutte le interfacce API che accettano o restituiscono le stringhe lo useranno. Tutti i tipi primitivi JS saranno incapsulati (in scatola ) con i loro corrispondenti tipi di object quando li usano come oggetti, ad esempio l’accesso a proprietà o metodi di chiamata. Poiché String
è attualmente dichiarato come interfaccia piuttosto che come una class nella libreria di base di TypeScript , la tipizzazione strutturale indica che la string
è considerata un sottotipo di String
motivo per cui la prima riga supera i controlli del tipo di compilazione.