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月) s1
和s2
都是有效的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
运算符来testingString
types的instanceof
,例如myString instanceof String
。
string
是JavaScript的基本types之一, string
值主要由文字(例如'foo'
和"bar"
)以及各种函数和运算符的结果types创build。 您可以使用typeof myString === 'string'
来testingstring
types。
绝大多数情况下, string
是您应该使用的types – 几乎所有接收或返回string的API接口都将使用它。 所有的JS基元types都会在使用它们作为对象(例如访问属性或调用方法)时用相应的对象types进行包装( 装箱 )。 由于当前String
在TypeScript的核心库中被声明为一个接口而不是类,所以结构types意味着string
被认为是String
一个子types,这就是为什么你的第一行通过编译types检查。