有人知道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有7种基本类型字符串,数字,布尔值,null, undefined, symbol和bigint,前五种从一开始就存在,符号原语是在ES2015中添加的,bigint正在最终确定的过程中。
原语与对象的区别在于它是不可变的并且没有方法。你可能会反对字符串有方法
console.log('primitive'.charAt(3)) // output is "m"
虽然字符串原语没有方法,但JavaScript也定义了string对象类型。JavaScript可以在这些类型之间自由转换。当您在字符串原语上访问charAt等方法时,JavaScript将其包装在string对象中,调用该方法,然后丢弃该对象。
TypeScript通过为原语及其对象包装器提供不同的类型来模拟这种区别:
字符串和字符串
数目和数目
布尔和布尔
符号与符号
bigint和bigint
通常情况下,如果你使用String而不是String,事情会正常工作,除了在某些情况下,编译器会引发一个错误
如您所见,string可以赋值给string,但string不能赋值给string。
按照错误消息中的建议使用字符串。TypeScript附带的所有类型声明都使用它,几乎所有其他库的类型也是如此。
TypeScript:字符串vs字符串
String类型的实参不能赋值给String类型的形参。
'string'是一个原语,但'string'是一个包装器对象。
尽可能使用'string'。
demo
字符串对象
// error
class SVGStorageUtils {
store: object;
constructor(store: object) {
this.store = store;
}
setData(key: String = ``, data: object) {
sessionStorage.setItem(key, JSON.stringify(data));
}
getData(key: String = ``) {
const obj = JSON.parse(sessionStorage.getItem(key));
}
}
字符串的原始
// ok
class SVGStorageUtils {
store: object;
constructor(store: object) {
this.store = store;
}
setData(key: string = ``, data: object) {
sessionStorage.setItem(key, JSON.stringify(data));
}
getData(key: string = ``) {
const obj = JSON.parse(sessionStorage.getItem(key));
}
}
JavaScript有7种基本类型字符串,数字,布尔值,null, undefined, symbol和bigint,前五种从一开始就存在,符号原语是在ES2015中添加的,bigint正在最终确定的过程中。
原语与对象的区别在于它是不可变的并且没有方法。你可能会反对字符串有方法
console.log('primitive'.charAt(3)) // output is "m"
虽然字符串原语没有方法,但JavaScript也定义了string对象类型。JavaScript可以在这些类型之间自由转换。当您在字符串原语上访问charAt等方法时,JavaScript将其包装在string对象中,调用该方法,然后丢弃该对象。
TypeScript通过为原语及其对象包装器提供不同的类型来模拟这种区别:
字符串和字符串
数目和数目
布尔和布尔
符号与符号
bigint和bigint
通常情况下,如果你使用String而不是String,事情会正常工作,除了在某些情况下,编译器会引发一个错误
如您所见,string可以赋值给string,但string不能赋值给string。
按照错误消息中的建议使用字符串。TypeScript附带的所有类型声明都使用它,几乎所有其他库的类型也是如此。