标签函数可拦截模板字符串解析,接收静态片段数组和插值值数组,支持原始字符串访问、html转义、嵌套模板及异步求值。

字符串模板标签函数允许你在模板字符串被解析时插入自定义逻辑,不只是简单拼接,而是能拦截原始字符串片段、处理插值值、甚至修改最终结果。
标签函数的基本结构
一个标签函数接收至少两个参数:第一个是包含所有静态字符串片段的数组(strings),第二个及之后的是对应位置的插值表达式求值结果(values)。注意:strings 的长度总是比 values 多 1。
例如:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
console.log(strings); // ["Hello ", "!", " Today is "]
console.log(values); // ["Alice", "2024-06-15"]
return strings[0] + values[0].toUpperCase() + strings[1];
}
myTag`Hello ${"Alice"}! Today is ${new Date().toISOString().split('T')[0]}`;
处理转义与原始字符串
默认情况下,strings 数组中的字符串已做标准转义解析(如 变成换行符)。若需访问原始字面量(未处理转义),可用 strings.raw 属性:
- strings.raw 返回一个同样长度的数组,每个元素是原始字符串( 仍为两个字符 \n)
- 适合实现 DSL 解析器、正则构建、SQL 拼接等需要精确控制字符的场景
- 例如:String.raw`C: ewile.txt` → "C:\new\file.txt"
实现安全 HTML 插入或转义
可利用标签函数对插值内容自动过滤,防止 XSS:
- 遍历 values,对每个值调用 escapeHTML()(如将 替换为 <)
- 用 strings 拼接时保留原始结构,只替换插值部分
- 若某插值是可信对象(如带 _isTrustedHTML: true 标记),可跳过转义
支持嵌套模板与延迟求值
标签函数本身可返回另一个标签函数,实现链式或条件解析:
- 返回函数而非字符串,使其能接收后续模板字面量
- 适用于 i18n:先传语言环境,再传模板,最后执行插值
- 也可包装异步值:插值传 Promise,标签函数内部 await 后再合成
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










