在TypeScript中,String对象和string原始类型有显著区别,通常推荐使用string类型。
string原始类型 vs String对象string 原始类型:用于表示文本数据,直接使用字面量(如"hello")定义,是TypeScript中推荐的方式。String 对象:通过new String("hello")创建,属于对象类型。与string原始类型不兼容,直接赋值会报错。支持的属性有:constructor、length、prototype。s 是原始字符串类型(string),而 strObj 是 String 对象类型(String)。这意味着它们的类型不同。let s: string = "hello";let strObj: String = new String("world");// s = strObj; // 错误:类型不兼容// strObj = s; // 错误:类型不兼容String对象方法charAt():返回在指定位置的字符。charCodeAt():返回在指定的位置的字符的 Unicode 编码。concat():连接两个或更多字符串,并返回新的字符串。indexOf():返回某个指定的字符串值在字符串中首次出现的位置。localeCompare():用本地特定的顺序来比较两个字符串。字符串方法TypeScript为字符串提供了严格类型检查的方法,如charAt、substring、split等:
match():查找找到一个或多个正则表达式的匹配replace():替换与正则表达式匹配的子串search():检索与正则表达式相匹配的值slice():提取字符串的片断,并在新的字符串中返回被提取的部分split():把字符串分割为子字符串数组substr():从起始索引号提取字符串中指定数目的字符substring():提取字符串中两个指定的索引号之间的字符toLowerCase():把字符串转换为小写toUpperCase():把字符串转换为大写const str: string = "hello";const char: string = str.charAt(0); // 'h'const parts: string[] = str.split(''); // ['h', 'e', 'l', 'l', 'o']模板字符串支持反引号定义模板字符串,并推断为string类型:
const name = "TypeScript";const greeting: string = `Hello, ${name}!`;字符串字面量类型通过联合类型约束变量为特定字符串:
type Direction = "left" | "right";let dir: Direction = "left"; // 只能赋值为"left"或"right"模板字面量类型(TypeScript 4.1+)生成精确的字符串类型:
type EventType = "click" | "hover";type Element = "div" | "span";type HandlerName = `on${Capitalize<EventType>}${Capitalize<Element>}`;// 结果: "onClickDiv" | "onClickSpan" | "onHoverDiv" | "onHoverSpan"索引访问与安全默认行为:索引访问类型为string,即使越界返回undefined。启用严格检查:在tsconfig.json中设置noUncheckedIndexedAccess: true,索引访问类型变为string | undefined。let str = "hello";let char = str[10]; // 类型为string | undefined(需开启严格选项)工具类型使用内置类型操作字符串类型:
type UppercaseStr = Uppercase<"hello">; // "HELLO"type LowercaseStr = Lowercase<"HELLO">; // "hello"避免类型断言处理JSON解析时优先使用类型断言或泛型:
interface User { name: string; age: number; }const jsonStr = '{"name": "Alice", "age": 30}';const user: User = JSON.parse(jsonStr) as User;总结优先使用string原始类型,避免String对象。利用字符串字面量和模板字面量类型增强类型安全。严格模式(如noUncheckedIndexedAccess)提升索引访问的安全性。结合运行时验证确保解析逻辑的健壮性。