Typescript: difference between String and string
有人知道打字脚本中字符串和字符串的区别吗?我假设它们应该是相同的,对吗?
1 2 3 4
| var a: String ="test";
var b: string ="another test";
a = b;
b = a; // this gives a compiler error! |
当前版本的编译器说:
1 2 3
| Type 'String' is not assignable to type 'string'.
'string' is a primitive, but 'String' is a wrapper object.
Prefer using 'string' when possible. |
号
那是虫子吗?
下面是一个显示差异的例子,这将有助于解释。
1 2 3
| var s1 = new String("Avoid newing things where possible");
var s2 ="A string, in TypeScript of type 'string'";
var s3: string; |
String是javascript字符串类型,您可以使用它来创建新的字符串。没有人会像在javascript中那样认为文字更好,因此上面示例中的s2创建了一个新字符串,而不使用new关键字,也不显式使用String对象。
String是typescript字符串类型,可用于键入变量、参数和返回值。
其他说明…
目前(2013年2月)s1和s2都是有效的javascript。s3是有效的typescript。
使用String。您可能永远不需要使用它,字符串文本被普遍接受为初始化字符串的正确方法。在javascript中,也可以更好地使用对象文本和数组文本:
1 2
| var arr = []; // not var arr = new Array();
var obj = {}; // not var obj = new Object(); |
号
如果你真的很喜欢这个字符串,你可以用两种方法之一在typescript中使用它…
1 2
| var str: String = new String("Hello world"); // Uses the JavaScript String object
var str: string = String("Hello World"); // Uses the TypeScript string type |
- 为了解决这个问题。因此,在使用其他使用字符串值的lib时(基于没有人实际使用字符串(?)的想法),使用primitve类型字符串可以安全地避免可能的类型转换问题。.字符串和字符串之间的赋值和viceversa是否应该被同等对待?
- 实际上,使用任何一种类型都是安全的,因为排版脚本类型被剥离,以提供100%兼容的JavaScript(ES3或ES5风格,以及版本1 ES6风格)。我建议使用string类型和文字初始化:var s: string ="My String";。
- 据记载,由于类型推理,var s: string ="My String"与var s ="My String"完全相同。而且,不管我读了多少遍这个回复,我还是不明白字体中的string类型的目的,因为在一天结束时,('My String')['constructor'] === String类型……
- 如果不使用值初始化变量,通常会添加注释。
- 我添加了一个答案来澄清"foo"和"new string"("foo")不是typescript引入的新区别-我认为将一个类型称为JS类型,另一个类型称为TS类型没有帮助。
- 对于数组文字:new Array()组合声明某种类型的数组并将其初始化为空可能很有趣:我发现以下语法更简洁:const foos = new Array(),而不是const foos: Foo[] = [];或const foos = [] as Foo[]。
- DougCrockford建议在存在文本的基元类型中避免使用new关键字。因此,const foos: Foo[] = [];发到了const foos = [];,这更符合C先生的建议。
这两种类型在javascript和typescript中都是不同的——typescript只是为我们提供了一种语法,以便在进行中对类型进行注释和检查。
String是指原型链中有String.prototype的对象实例。您可以通过各种方式获得这样的实例,例如new String('foo')和Object('foo')。您可以使用instanceof操作符测试String类型的实例,例如myString instanceof String。
String是javascript的原始类型之一,String的值主要是用文字(如'foo'和"bar"创建的,并且是各种函数和运算符的结果类型。您可以使用typeof myString === 'string'测试String类型。
大多数情况下,String是您应该使用的类型——几乎所有接受或返回字符串的API接口都会使用它。当将所有JS基元类型用作对象(例如访问属性或调用方法)时,它们将被包装(装箱)为相应的对象类型。由于String当前声明为接口而不是typescript核心库中的类,因此结构类型意味着String被认为是String的子类型,这就是您的第一行通过编译类型检查的原因。