Alguém sabe a diferença entre String e string no TypeScript? Estou correto ao assumir que eles devem ser os mesmos?
var a: String = "test";
var b: string = "another test";
a = b;
b = a; // this gives a compiler error!
A versão atual do compilador diz:
Type 'String' is not assignable to type 'string'.
'string' is a primitive, but 'String' is a wrapper object.
Prefer using 'string' when possible.
Isso é um bug?
typescript
Paul0515
fonte
fonte
Respostas:
Aqui está um exemplo que mostra as diferenças, o que ajudará na explicação.
String
é o tipo de String JavaScript, que você pode usar para criar novas strings. Ninguém faz isso como no JavaScript, os literais são considerados melhores; portanto,s2
no exemplo acima, cria uma nova string sem o uso danew
palavra - chave e sem o uso explícito doString
objeto.string
é o tipo de string TypeScript, que você pode usar para digitar variáveis, parâmetros e valores de retorno.Notas Adicionais...
Atualmente (fevereiro de 2013) Ambos
s1
es2
são JavaScript válido.s3
é TypeScript válido.Uso de
String
. Você provavelmente nunca precisará usá-lo, literais de string são universalmente aceitos como sendo a maneira correta de inicializar uma string. Em JavaScript, também é considerado melhor usar literais de objeto e literais de matriz também:Se você realmente tinha uma propensão para a string, poderia usá-la no TypeScript de uma de duas maneiras ...
fonte
string
tipo e uma inicialização literal:var s: string = "My String";
.var s: string = "My String"
é idêntico avar s = "My String"
... também, não importa quantas vezes eu leia essa resposta, ainda não entendo o objetivo dostring
tipo no TypeScript, pois, no final do dia ,('My String')['constructor'] === String
...Os dois tipos são distintos em JavaScript, assim como o TypeScript - o TypeScript apenas nos fornece sintaxe para anotar e verificar os tipos à medida que avançamos.
String
refere-se a uma instância de objeto que possuiString.prototype
em sua cadeia de protótipos. Você pode obter essa instância de várias maneiras, por exemplo,new String('foo')
eObject('foo')
. Você pode testar uma instância doString
tipo com oinstanceof
operador, por exemplomyString instanceof String
.string
é um dos tipos de primitivas JavaScript, estring
os valores são criados principalmente com literais por exemplo,'foo'
e"bar"
, e como o tipo de resultado de várias funções e operadores. Você pode testar ostring
tipo usandotypeof myString === 'string'
.A grande maioria das vezes,
string
é o tipo que você deve usar - quase todas as interfaces de API que usam ou retornam seqüências de caracteres o usarão. Todos os tipos primitivos de JS serão agrupados (em caixa ) com seus tipos de objetos correspondentes ao usá-los como objetos, por exemplo, acessar propriedades ou chamar métodos. ComoString
atualmente é declarado como uma interface e não como uma classe na biblioteca principal do TypeScript , a tipagem estrutural significa questring
é considerado um subtipo, peloString
que sua primeira linha passa nas verificações de tipo de compilação.fonte
No JavaScript, as strings podem ser do tipo primitivo ou de objetos da string. O código a seguir mostra a distinção:
Seu erro:
É lançada pelo compilador TS porque você tentou atribuir o tipo
string
a um tipo de objeto de string (criado pornew
palavra - chave). O compilador está lhe dizendo que você deve usar o tipostring
apenas para tipos primitivos de strings e não pode usá-lo para descrever os tipos de objetos de strings.fonte
TypeScript:
String
vsstring
demonstração
fonte
Para leitores rápidos:
Não sempre usar os tipos de números, cordas , booleanos, símbolo ou objeto Estes tipos referir a objetos em caixas não-primitivos que quase nunca são usados adequadamente no código JavaScript.
fonte