Convertir una cadena en una cadena de plantilla
¿Es posible crear una cadena de plantilla como una cadena habitual?
let a = "b:${b}";
y luego convertirlo en una cadena de plantilla,
let b = 10;
console.log(a.template()); // b:10
sin eval
y new Function
otros medios de generación de código dinámico?
Aceptado
En mi proyecto he creado algo como esto con 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);
Expandir fragmento
Como la cadena de su plantilla debe hacer referencia a la b
variable dinámicamente (en tiempo de ejecución), la respuesta es: NO, es imposible hacerlo sin la generación de código dinámico.
Pero eval
es bastante simple:
let tpl = eval('`'+a+'`');