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()
: 类似功能,但语法不同
实际应用场景
- 邮件模板: 生成个性化的邮件内容
- HTML模板: 生成动态HTML内容
- 配置文件: 生成配置文件内容
- 错误消息: 生成格式化的错误消息
- API响应: 格式化API响应内容