TypeScript中string与String的区别详解
本文深入解析TypeScript中string与String的核心区别。string为ES6支持的原生类型,无额外属性;String为对象包装类型,支持方法调用及属性扩展。通过代码对比展示两者在内存引用、eval处理及属性赋值上的不同表现,帮助开发者根据场景选择合适的类型定义方式。
摘要:在TypeScript中,string通常指代原生数据类型,而String则指代对象类型。
背景介绍
与JavaScript语言不同,TypeScript采用静态类型系统,明确指定变量可存储的数据类型。若尝试在JS中使用类型注释,会报错提示“类型注释只可以在TS文件中被使用”,如下图所示:

TypeScript是JavaScript的超集(superset),TypeScript代码需要经过编译(语法转换)生成JavaScript后才能由浏览器执行。TypeScript严格区分string和String这两种数据类型。通常情况下,string表示原生类型,而String表示对象类型。
1、原生string类型
JavaScript在ES6标准中定义了6种原生类型(number),string是其中之一。

原生string是不包含额外属性的值(即没有properties)。这包括字面上未定义类型、字面上定义为string、字面上定义为String,以及从string函数调用返回的字符串,均可归为原生类型。

上述三个变量的类型(通过typeof()检查)均为string。
2、对象String类型
对象是不同属性的集合,一个对象可以调用多种相应的方法。
let msg3: String = new String('Hello world!');变量msg3的类型即为object:
console.log(typeof(msg3)); // objectString对象支持的方法如下:



3、代码对比分析
我们对以下4个变量进行类型探索与比较:
let msg: string = 'Hello world!';
let msg2: String = 'Hello world!';
let msg22 = 'Hello world!'; //字面上没有定义类型
let msg3: String = new String('Hello world!');
console.log(typeof(msg)); //string
console.log(typeof(msg2)); //string
console.log(typeof(msg22)); //string
console.log(typeof(msg3)); //object
console.log(msg === msg2); //true
console.log(msg === msg3); //false
console.log(msg2 === msg3); //false4、为何需要String对象
首先,当使用关键字new创建String对象时,TypeScript会创建一个新的对象实例。即使用new创建了两个String对象,即使内容相同,它们也指向不同的内存地址。
举例如下:
1. 当用a1, b1代表相同值的两个变量时,它们是相等的;而当用new创建两个对象时,即使值相同,它们也是不相等的(下图输出结果为false, true):

2. eval()函数的作用:用于计算表达式的值。如果将eval()直接赋给string,且string中包含计算式的字符串,它将返回计算后的值;而如果将eval()赋给String,由于其非原生类型,它只会返回String这个对象(下图输出结果为27, :"8 + 20", 28):

其次,String对象可以拥有属性。我们可以利用String对象在属性中保留额外的值。尽管这种用法并不常见,但它确实是TypeScript的一个特性:
var prim = 'hello HW';
var obj = new String('hello HW Cloud');
prim.property = 'PaaS'; // Invalid
obj.property = 'PaaS'; // Valid
console.log(obj.property); //输出为PaaS4、两者区别总结

到此这篇关于TypeScript里string和String的区别的文章就介绍到这了,更多相关TypeScript里string和String内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
JavaScript异步发送HTTP请求时怎么优雅地处理错误
2026-11-05 17:10:44
5款主流JS在线运行工具对比:CodePen、JSFiddle与StackBlitz怎么选
2026-11-05 17:04:04
JavaScript入门书籍避坑:这些书不适合初学者
2026-11-05 16:31:15
JS使用Math.round实现保留两位小数的原理与代码
2026-11-05 15:35:55
JavaScript 原生 Date 对象怎么实现日期加减
2026-11-05 14:30:00








