Skip to content

template

使用模板字符串替换占位符,支持对象和数组数据。

基础用法

typescript
import { template } from 'radash'

const templateStr = 'Hello {{name}}, welcome to {{company}}!'
const data = { name: 'Alice', company: 'Tech Corp' }

console.log(template(templateStr, data)) // 'Hello Alice, welcome to Tech Corp!'

语法

typescript
function template(str: string, data: Record<string, any>): string

参数

  • str (string): 包含占位符的模板字符串
  • data (Record<string, any>): 用于替换占位符的数据对象

返回值

返回替换了占位符的字符串。

示例

基本模板替换

typescript
import { template } from 'radash'

const templateStr = 'Hello {{name}}, you are {{age}} years old.'
const data = { name: 'Alice', age: 25 }

const result = template(templateStr, data)
console.log(result) // 'Hello Alice, you are 25 years old.'

处理缺失的占位符

typescript
import { template } from 'radash'

const templateStr = 'Hello {{name}}, welcome to {{company}}!'
const data = { name: 'Alice' } // company 缺失

const result = template(templateStr, data)
console.log(result) // 'Hello Alice, welcome to !'

处理嵌套对象

typescript
import { template } from 'radash'

const templateStr = 'User: {{user.name}}, Email: {{user.email}}, Age: {{user.profile.age}}'
const data = {
  user: {
    name: 'Alice',
    email: 'alice@example.com',
    profile: {
      age: 25
    }
  }
}

const result = template(templateStr, data)
console.log(result) // 'User: Alice, Email: alice@example.com, Age: 25'

处理数组数据

typescript
import { template } from 'radash'

const templateStr = 'First item: {{items.0}}, Second item: {{items.1}}'
const data = {
  items: ['apple', 'banana', 'orange']
}

const result = template(templateStr, data)
console.log(result) // 'First item: apple, Second item: banana'

处理复杂嵌套

typescript
import { template } from 'radash'

const templateStr = `
User Profile:
- Name: {{user.profile.name}}
- Email: {{user.profile.email}}
- Address: {{user.profile.address.city}}, {{user.profile.address.country}}
- Skills: {{user.skills.0}}, {{user.skills.1}}
`

const data = {
  user: {
    profile: {
      name: 'Alice',
      email: 'alice@example.com',
      address: {
        city: 'Beijing',
        country: 'China'
      }
    },
    skills: ['JavaScript', 'TypeScript', 'React']
  }
}

const result = template(templateStr, data)
console.log(result)
// User Profile:
// - Name: Alice
// - Email: alice@example.com
// - Address: Beijing, China
// - Skills: JavaScript, TypeScript

处理不同类型的值

typescript
import { template } from 'radash'

const templateStr = 'Name: {{name}}, Age: {{age}}, Active: {{isActive}}, Score: {{score}}'
const data = {
  name: 'Alice',
  age: 25,
  isActive: true,
  score: 95.5
}

const result = template(templateStr, data)
console.log(result) // 'Name: Alice, Age: 25, Active: true, Score: 95.5'

处理空值和undefined

typescript
import { template } from 'radash'

const templateStr = 'Name: {{name}}, Email: {{email}}, Phone: {{phone}}'
const data = {
  name: 'Alice',
  email: null,
  phone: undefined
}

const result = template(templateStr, data)
console.log(result) // 'Name: Alice, Email: , Phone: '

处理特殊字符

typescript
import { template } from 'radash'

const templateStr = 'Message: {{message}}, URL: {{url}}'
const data = {
  message: 'Hello & Welcome!',
  url: 'https://example.com?param=value'
}

const result = template(templateStr, data)
console.log(result) // 'Message: Hello & Welcome!, URL: https://example.com?param=value'

处理函数值

typescript
import { template } from 'radash'

const templateStr = 'Name: {{name}}, Greeting: {{greeting}}'
const data = {
  name: 'Alice',
  greeting: () => 'Hello!'
}

const result = template(templateStr, data)
console.log(result) // 'Name: Alice, Greeting: function'

处理对象值

typescript
import { template } from 'radash'

const templateStr = 'User: {{user}}, Settings: {{settings}}'
const data = {
  user: { name: 'Alice', age: 25 },
  settings: { theme: 'dark', notifications: true }
}

const result = template(templateStr, data)
console.log(result) // 'User: [object Object], Settings: [object Object]'

处理数组值

typescript
import { template } from 'radash'

const templateStr = 'Tags: {{tags}}, Numbers: {{numbers}}'
const data = {
  tags: ['javascript', 'typescript', 'react'],
  numbers: [1, 2, 3, 4, 5]
}

const result = template(templateStr, data)
console.log(result) // 'Tags: javascript,typescript,react, Numbers: 1,2,3,4,5'

处理日期值

typescript
import { template } from 'radash'

const templateStr = 'Created: {{createdAt}}, Updated: {{updatedAt}}'
const data = {
  createdAt: new Date('2023-01-01'),
  updatedAt: new Date('2023-12-31')
}

const result = template(templateStr, data)
console.log(result) // 'Created: 2023-01-01T00:00:00.000Z, Updated: 2023-12-31T00:00:00.000Z'

处理布尔值

typescript
import { template } from 'radash'

const templateStr = 'Active: {{isActive}}, Verified: {{isVerified}}, Premium: {{isPremium}}'
const data = {
  isActive: true,
  isVerified: false,
  isPremium: true
}

const result = template(templateStr, data)
console.log(result) // 'Active: true, Verified: false, Premium: true'

处理数字值

typescript
import { template } from 'radash'

const templateStr = 'ID: {{id}}, Score: {{score}}, Rating: {{rating}}'
const data = {
  id: 123,
  score: 95.5,
  rating: 4.8
}

const result = template(templateStr, data)
console.log(result) // 'ID: 123, Score: 95.5, Rating: 4.8'

处理空字符串

typescript
import { template } from 'radash'

const templateStr = 'Name: {{name}}, Description: {{description}}'
const data = {
  name: 'Alice',
  description: ''
}

const result = template(templateStr, data)
console.log(result) // 'Name: Alice, Description: '

处理零值

typescript
import { template } from 'radash'

const templateStr = 'Count: {{count}}, Price: {{price}}, Rating: {{rating}}'
const data = {
  count: 0,
  price: 0.0,
  rating: 0
}

const result = template(templateStr, data)
console.log(result) // 'Count: 0, Price: 0, Rating: 0'

处理复杂模板

typescript
import { template } from 'radash'

const templateStr = `
# User Profile

## Basic Information
- **Name**: {{user.name}}
- **Email**: {{user.email}}
- **Age**: {{user.age}}

## Address
- **City**: {{user.address.city}}
- **Country**: {{user.address.country}}
- **Postal Code**: {{user.address.postalCode}}

## Preferences
- **Theme**: {{user.preferences.theme}}
- **Language**: {{user.preferences.language}}
- **Notifications**: {{user.preferences.notifications}}

## Skills
- **Primary**: {{user.skills.0}}
- **Secondary**: {{user.skills.1}}
- **Additional**: {{user.skills.2}}
`

const data = {
  user: {
    name: 'Alice Smith',
    email: 'alice@example.com',
    age: 25,
    address: {
      city: 'Beijing',
      country: 'China',
      postalCode: '100000'
    },
    preferences: {
      theme: 'dark',
      language: 'en',
      notifications: true
    },
    skills: ['JavaScript', 'TypeScript', 'React']
  }
}

const result = template(templateStr, data)
console.log(result)

处理API响应模板

typescript
import { template } from 'radash'

const templateStr = `
API Response:
- Status: {{status}}
- Message: {{message}}
- Data: {{data}}
- Timestamp: {{timestamp}}
- Request ID: {{requestId}}
`

const data = {
  status: 200,
  message: 'Success',
  data: { id: 1, name: 'Alice' },
  timestamp: new Date().toISOString(),
  requestId: 'req_123456'
}

const result = template(templateStr, data)
console.log(result)

处理错误消息模板

typescript
import { template } from 'radash'

const templateStr = 'Error {{code}}: {{message}} at {{location}}'
const data = {
  code: 404,
  message: 'Resource not found',
  location: '/api/users/999'
}

const result = template(templateStr, data)
console.log(result) // 'Error 404: Resource not found at /api/users/999'

处理邮件模板

typescript
import { template } from 'radash'

const templateStr = `
Subject: Welcome to {{company}}, {{name}}!

Dear {{name}},

Welcome to {{company}}! We're excited to have you on board.

Your account details:
- Username: {{username}}
- Email: {{email}}
- Role: {{role}}

Best regards,
The {{company}} Team
`

const data = {
  name: 'Alice Smith',
  company: 'Tech Corp',
  username: 'alice.smith',
  email: 'alice@example.com',
  role: 'Software Developer'
}

const result = template(templateStr, data)
console.log(result)

处理配置文件模板

typescript
import { template } from 'radash'

const templateStr = `
# Application Configuration

## Server Settings
server:
  host: {{server.host}}
  port: {{server.port}}
  timeout: {{server.timeout}}

## Database Settings
database:
  url: {{database.url}}
  pool:
    min: {{database.pool.min}}
    max: {{database.pool.max}}

## API Settings
api:
  baseUrl: {{api.baseUrl}}
  version: {{api.version}}
`

const data = {
  server: {
    host: 'localhost',
    port: 3000,
    timeout: 5000
  },
  database: {
    url: 'postgresql://localhost:5432/mydb',
    pool: {
      min: 1,
      max: 10
    }
  },
  api: {
    baseUrl: 'https://api.example.com',
    version: 'v1'
  }
}

const result = template(templateStr, data)
console.log(result)

处理HTML模板

typescript
import { template } from 'radash'

const templateStr = `
<div class="user-card">
  <h2>{{user.name}}</h2>
  <p>Email: {{user.email}}</p>
  <p>Age: {{user.age}}</p>
  <p>Location: {{user.location}}</p>
  <div class="skills">
    <h3>Skills:</h3>
    <ul>
      <li>{{user.skills.0}}</li>
      <li>{{user.skills.1}}</li>
      <li>{{user.skills.2}}</li>
    </ul>
  </div>
</div>
`

const data = {
  user: {
    name: 'Alice Smith',
    email: 'alice@example.com',
    age: 25,
    location: 'Beijing, China',
    skills: ['JavaScript', 'TypeScript', 'React']
  }
}

const result = template(templateStr, data)
console.log(result)

处理SQL查询模板

typescript
import { template } from 'radash'

const templateStr = `
SELECT {{fields}}
FROM {{table}}
WHERE {{conditions}}
ORDER BY {{orderBy}}
LIMIT {{limit}}
`

const data = {
  fields: 'id, name, email, created_at',
  table: 'users',
  conditions: 'status = "active" AND age > 18',
  orderBy: 'created_at DESC',
  limit: 10
}

const result = template(templateStr, data)
console.log(result)

与其他方法的区别

  • String.replace(): 原生字符串替换,功能有限
  • template(): radash提供的模板字符串替换方法
  • lodash.template(): 类似功能,但语法不同

实际应用场景

  1. 邮件模板: 生成个性化的邮件内容
  2. HTML模板: 生成动态HTML内容
  3. 配置文件: 生成配置文件内容
  4. 错误消息: 生成格式化的错误消息
  5. API响应: 格式化API响应内容

Released under the MIT License.