Typescript:string和string的区别

有没有人知道string和string之间的TypeScript的区别? 我认为他们应该是一样的吗?

var a: String = "test"; var b: string = "another test"; a = b; b = a; // this gives a compiler error! 

编译器的当前版本说:

 Type 'String' is not assignable to type 'string'. 'string' is a primitive, but 'String' is a wrapper object. Prefer using 'string' when possible. 

这是一个错误?

这里是一个显示差异的例子,这将有助于解释。

 var s1 = new String("Avoid newing things where possible"); var s2 = "A string, in TypeScript of type 'string'"; var s3: string; 

String是JavaScriptstringtypes,您可以使用它来创build新的string。 没有人会这样做JavaScript中的文字被认为是更好的,所以在上面的例子s2创build一个新的string,而不使用new关键字,并没有明确使用String对象。

string是TypeScriptstringtypes,您可以使用它来键入variables,参数和返回值。

补充笔记…

目前(2013年2月) s1s2都是有效的JavaScript。 s3是有效的TypeScript。

使用String 。 您可能永远不需要使用它,string文字被普遍认为是初始化string的正确方法。 在JavaScript中,使用对象文字和数组文字也是更好的select:

 var arr = []; // not var arr = new Array(); var obj = {}; // not var obj = new Object(); 

如果你真的喜欢这个string,你可以用两种方法之一在TypeScript中使用它…

 var str: String = new String("Hello world"); // Uses the JavaScript String object var str: string = String("Hello World"); // Uses the TypeScript string type 

这两种types在JavaScript以及TypeScript中是不同的 – TypeScript只是给我们语法来注释和检查types。

String是指在其原型链中具有String.prototype的对象实例。 你可以用各种方式获得这样一个实例,例如new String('foo')Object('foo') 。 您可以使用instanceof运算符来testingStringtypes的instanceof ,例如myString instanceof String

string是JavaScript的基本types之一, string值主要由文字(例如'foo'"bar" )以及各种函数和运算符的结果types创build。 您可以使用typeof myString === 'string'来testingstringtypes。

绝大多数情况下, string是您应该使用的types – 几乎所有接收或返回string的API接口都将使用它。 所有的JS基元types都会在使用它们作为对象(例如访问属性或调用方法)时用相应的对象types进行包装( 装箱 )。 由于当前String在TypeScript的核心库中被声明为一个接口而不是类,所以结构types意味着string被认为是String一个子types,这就是为什么你的第一行通过编译types检查。