将值插值到预定义的反引号模板文字字符串中?

时间:2018-06-25 18:57:13

标签: javascript typescript

我想做这样的事情:

let template = `The first value is ${v1} and the second value is ${v2}`;
template.interpolate(v1,v2);

使用Javascript / Typescript可以吗?我找到的文档包含在创建模板字符串的同一上下文中插入到模板中的变量。

正如评论中指出的那样,有很多方法可以使用Javascript来做到这一点,但是我特别想知道我们是否可以使用反引号创建预定义模板?例如,重复链接使用引号,而引号不支持多行模板标记。

2 个答案:

答案 0 :(得分:1)

根据MDN template literals reference,您可以使用反引号创建自己的模板,请参考标记模板部分。

适合您的示例:

function template(strings, ...keys) {
  return function(...values) {
    var dict = values[values.length - 1] || {};
    var result = [strings[0]];
    keys.forEach(function(key, i) {
      var value = Number.isInteger(key) ? values[key] : dict[key];
      result.push(value, strings[i + 1]);
    });
    return result.join('');
  };
}

var interpolate = template`The first value is ${'v1'} and 
the second value is ${'v2'}`;

interpolate({ v1: 1, v2: 2 });

其输出应为:

The first value is 1 and
the second value is 2

希望有帮助

答案 1 :(得分:0)

感谢@RodrigoFerreira。我仔细阅读了模板文字部分和您的答案,并意识到它就像定义一个函数并将其传递给用户一样简单,而不是使用直接的模板文字:

const f = (v1:any)=> {
    return `v1 is ${v1}`;
}

console.log(f("Howdy Rodrigo!")); //logs v1 is Howdy Rodrigo!