鸿蒙开发基础——TypeScript String解析

在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)提升索引访问的安全性。
  • 结合运行时验证确保解析逻辑的健壮性。
原文链接:,转发请注明来源!