将字符串转换为模板字符串

是否可以将模板字符串创建为常规字符串,

let a = "b:${b}";

然后将其转换为模板字符串,

let b = 10;
console.log(a.template()); // b:10

没有 ,以及其他动态代码生成方法?evalnew Function


答案 1

在我的项目中,我用ES6创建了这样的东西:

String.prototype.interpolate = function(params) {
  const names = Object.keys(params);
  const vals = Object.values(params);
  return new Function(...names, `return \`${this}\`;`)(...vals);
}

const template = 'Example text: ${text}';
const result = template.interpolate({
  text: 'Foo Boo'
});
console.log(result);

答案 2

由于模板字符串必须动态获取对变量的引用(在运行时),因此答案是:不,如果没有动态代码生成,就不可能做到这一点。b

但是,它非常简单:eval

let tpl = eval('`'+a+'`');