据我在TypeScript中了解,string
是基元,String
是对象。考虑以下代码:
let s: string = new String("foo");// ERROR
let S: String = "foo";//OK
为什么我们在第二行上没有出现错误。我们确实显示了我们将使用字符串对象,但是我们使用了字符串基本类型。
答案 0 :(得分:1)
第一行将出错,因为您试图将装箱的类型分配给更具体的。
第二行不会出错,因为您正在将原始类型转换为盒装类型,而盒装类型是不太明确的。
回到第一行:
let s = new String("foo");
console.log(typeof s); // object
错误描述很关键:
'string' is a primitive, but 'String' is a wrapper object.
如果您输入断言,您仍然可以执行此操作:TypeScript通过,然后JavaScrip 将框取消。我找不到类似原因的原因:
let s: string = new String("foo") as string; // OK
有趣的是,您也可以使用稍微相似的语法进行转换:
let s: string = String("foo"); // OK
console.log(typeof s); // string
这对于Boolean
转换特别有用,例如:
const objectExists = Boolean(someObjectThatMightNotExist);
console.log(typeof objectExists); // boolean