似乎模板字符串传递给模块是一件非常有用的事情,让我们假设你想让调用代码提供他们想要格式化某些输出的方式。
事情是,至少在节点REPL中,似乎是立即评估模板字符串,所以你不能。例如:
var template = `Time: ${now} | Message: ${thing.msg}`;
var thing = {msg : 'Something wicked this way comes'};
var now = new Date();
尝试将这三行输入REPL将导致错误,因为thing
的行尚未定义template
。
有解决方法吗?我真的很想将模板字符串本身作为变量传递。
请注意,我看到了关于" dumbing down"问这个之前的模板字符串。这根本不是同一个问题,因为我所要求的是推迟执行,而不是转换为普通字符串。
答案 0 :(得分:4)
我唯一能想到的是将模板包装在lambda中以推迟执行。不确定这对您的用例是否有用?我想的是:
var template = (now, thing) => `Time: ${now} | Message: ${thing && thing.msg}`;
var thing = {msg : 'Something wicked this way comes'};
var now = new Date();
console.log(template(now, thing));

使用${thing && thing.msg}
代替${thing.msg}
可以防止出现控制台错误,但如果对象不存在则会返回'Message: undefined'
。