字符串类型

字符串类型用于表示文本数据,是开发中最常用的类型之一。

基本用法

let name: string = "张三"
let greeting: string = '你好'
let message: string = `欢迎`

console.log(name)     // 张三
console.log(greeting) // 你好
console.log(message)  // 欢迎

引号类型

TypeScript 支持三种引号:

let double: string = "双引号"
let single: string = '单引号'
let template: string = `模板字符串`

模板字符串

模板字符串支持多行文本和变量嵌入:

let name: string = "张三"
let age: number = 25

let message: string = `你好,${name}!
你今年 ${age} 岁了。`

console.log(message)
// 你好,张三!
// 你今年 25 岁了。

表达式计算

let a: number = 10
let b: number = 20

console.log(`${a} + ${b} = ${a + b}`)  // 10 + 20 = 30

标签模板

function highlight(strings: TemplateStringsArray, ...values: any[]): string {
  return strings.reduce((result, str, i) => {
    const value = values[i] ? `<strong>${values[i]}</strong>` : ''
    return result + str + value
  }, '')
}

const name = "张三"
const age = 25

console.log(highlight`姓名:${name},年龄:${age}`)
// 姓名:<strong>张三</strong>,年龄:<strong>25</strong>

常用方法

查找

let str: string = "Hello, TypeScript!"

console.log(str.indexOf("Type"))      // 7
console.log(str.includes("Script"))   // true
console.log(str.startsWith("Hello"))  // true
console.log(str.endsWith("!"))        // true

截取

let str: string = "Hello, World!"

console.log(str.substring(0, 5))   // Hello
console.log(str.slice(7, 12))      // World
console.log(str.slice(-6))         // World!

分割与连接

let str: string = "apple,banana,orange"

let fruits: string[] = str.split(",")
console.log(fruits)  // ["apple", "banana", "orange"]

let joined: string = fruits.join(" | ")
console.log(joined)  // apple | banana | orange

大小写转换

let str: string = "Hello World"

console.log(str.toLowerCase())  // hello world
console.log(str.toUpperCase())  // HELLO WORLD

去除空白

let str: string = "  hello  "

console.log(str.trim())      // "hello"
console.log(str.trimStart()) // "hello  "
console.log(str.trimEnd())   // "  hello"

替换

let str: string = "hello world"

console.log(str.replace("world", "TypeScript"))  // hello TypeScript
console.log(str.replace(/o/g, "0"))              // hell0 w0rld

重复与填充

let str: string = "abc"

console.log(str.repeat(3))           // abcabcabc
console.log("5".padStart(3, "0"))    // 005
console.log("5".padEnd(3, "0"))      // 500

类型推断

let name = "张三"           // 推断为 string
let greeting = `你好`       // 推断为 string

实际应用

用户信息格式化

interface User {
  firstName: string
  lastName: string
  email: string
}

function formatUser(user: User): string {
  return `${user.lastName}${user.firstName} <${user.email}>`
}

const user: User = {
  firstName: "三",
  lastName: "张",
  email: "zhangsan@example.com"
}

console.log(formatUser(user))  // 张三 <zhangsan@example.com>

隐藏敏感信息

function maskEmail(email: string): string {
  const [name, domain] = email.split("@")
  const maskedName = name.slice(0, 2) + "***"
  return `${maskedName}@${domain}`
}

console.log(maskEmail("zhangsan@example.com"))  // zh***@example.com

生成唯一ID

function generateId(prefix: string = ""): string {
  const timestamp = Date.now().toString(36)
  const random = Math.random().toString(36).slice(2, 8)
  return `${prefix}${timestamp}${random}`
}

console.log(generateId("user_"))  // user_lz1abc123xyz

首字母大写

function capitalize(str: string): string {
  return str.charAt(0).toUpperCase() + str.slice(1)
}

console.log(capitalize("hello"))  // Hello

注意事项

不可变性

字符串是不可变的:

let str: string = "hello"
str[0] = "H"  // 无效,不会改变原字符串

let newStr = str.toUpperCase()  // 创建新字符串
console.log(newStr)  // HELLO

不要与 String 对象混淆

let correct: string = "hello"
let wrong: String = new String("hello")  // 不推荐

转义字符

let quote: string = '他说:"你好"'
let newline: string = "第一行\n第二行"
let tab: string = "姓名\t年龄"
let backslash: string = "路径:C:\\Users"

类型转换

let num: number = 123
let bool: boolean = true

console.log(num.toString())       // "123"
console.log(String(num))          // "123"
console.log(String(bool))         // "true"