有人知道TypeScript中String和String的区别吗?我假设它们应该是一样的,对吗?
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.
那是虫子吗?
在JavaScript中,字符串既可以是字符串基本类型,也可以是字符串对象。下面的代码显示了两者的区别:
var a: string = 'test'; // string literal
var b: String = new String('another test'); // string wrapper object
console.log(typeof a); // string
console.log(typeof b); // object
你的错误:
类型'String'不能赋值给类型'String'。'string'是a
但'String'是一个包装器对象。
尽可能使用'string'。
由TS编译器抛出,因为您试图将类型字符串分配给字符串对象类型(通过new关键字创建)。编译器告诉你,你应该只对字符串基本类型使用类型string,你不能用这个类型来描述字符串对象类型。
此错误消息表明您正在尝试将类型为String的值分配给类型为String的变量或参数。在TypeScript中,string是一个表示字符序列的基本类型,而string是一个包装器对象,它提供了处理字符串的额外方法。
错误消息建议尽可能使用字符串类型而不是string,因为字符串类型效率更高,相关开销更少。这是因为String是一个对象,而JavaScript(因此TypeScript)中的对象存储在堆上,创建时需要额外的内存分配。相比之下,字符串值直接存储在堆栈上,这使得它们更有效地使用。
要修复此错误,您需要确保使用的是string类型,而不是期望使用的string类型。只需在代码中用String替换String就可以做到这一点。例如,如果你有一个String类型的变量,你可以把它改成这样的String类型:
let myString: String = "hello, world!"; // Incorrect
let myString: string = "hello, world!"; // Correct
还值得注意的是,通常情况下,您应该尽可能使用string而不是string,因为它更有效,更容易使用。