Dattiloscritto: differenza tra stringa e stringa

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.