Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

178
Vistas
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 , new Function y otros medios de generación de código dinámico?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

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);

over 4 years ago · Santiago Trujillo Denunciar

0

Como su cadena de plantilla debe hacer referencia a la variable b dinámicamente (en tiempo de ejecución), la respuesta es: NO, es imposible hacerlo sin la generación dinámica de código.

Pero, con eval es bastante simple:

 let tpl = eval('`'+a+'`');
over 4 years ago · Santiago Trujillo Denunciar

0

No, no hay forma de hacer esto sin la generación dinámica de código.

Sin embargo, he creado una función que convertirá una cadena regular en una función a la que se le puede proporcionar un mapa de valores, usando cadenas de plantilla internamente.

Generar esencia de cadena de plantilla

 /** * Produces a function which uses template strings to do simple interpolation from objects. * * Usage: * var makeMeKing = generateTemplateString('${name} is now the king of ${country}!'); * * console.log(makeMeKing({ name: 'Bryan', country: 'Scotland'})); * // Logs 'Bryan is now the king of Scotland!' */ var generateTemplateString = (function(){ var cache = {}; function generateTemplate(template){ var fn = cache[template]; if (!fn){ // Replace ${expressions} (etc) with ${map.expressions}. var sanitized = template .replace(/\$\{([\s]*[^;\s\{]+[\s]*)\}/g, function(_, match){ return `\$\{map.${match.trim()}\}`; }) // Afterwards, replace anything that's not ${map.expressions}' (etc) with a blank string. .replace(/(\$\{(?!map\.)[^}]+\})/g, ''); fn = Function('map', `return \`${sanitized}\``); } return fn; } return generateTemplate; })();

Uso:

 var kingMaker = generateTemplateString('${name} is king!'); console.log(kingMaker({name: 'Bryan'})); // Logs 'Bryan is king!' to the console.

Espero que esto ayude a alguien. Si encuentra un problema con el código, tenga la amabilidad de actualizar Gist.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda