当我们将原始字符串分配给对象String时,TypeScript为什么不显示错误?

时间:2019-01-22 14:16:57

标签: javascript typescript

据我在TypeScript中了解,string是基元,String是对象。考虑以下代码:

let s: string = new String("foo");// ERROR 
let S: String = "foo";//OK

为什么我们在第二行上没有出现错误。我们确实显示了我们将使用字符串对象,但是我们使用了字符串基本类型。

1 个答案:

答案 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