字符串插值
注意:从 TypeScript 1.4 开始,TypeScript 中可以使用字符串插值:
var a = "Hello";
var b = "World";
var text = `${a} ${b}`
这将编译为:
var a = "Hello";
var b = "World";
var text = a + " " + b;
字符串格式
JavaScript String 对象没有 format 函数。 TypeScript 不会添加到本机对象,因此它也没有 String.format 函数。
对于 TypeScript,你需要扩展 String 接口,然后你需要提供一个implementation:
interface String {
format(...replacements: string[]): string;
}
if (!String.prototype.format) {
String.prototype.format = function() {
var args = arguments;
return this.replace(/{(\d+)}/g, function(match, number) {
return typeof args[number] != 'undefined'
? args[number]
: match
;
});
};
}
然后您可以使用该功能:
var myStr = 'This is an {0} for {0} purposes: {1}';
alert(myStr.format('example', 'end'));
您可以还考虑string interpolation(模板字符串的一项功能),这是ECMAScript 6 的一项功能 - 尽管要将其用于String.format 用例,您仍然需要包装它在一个函数中,以便提供一个包含格式和位置参数的原始字符串。它更典型地与被插值的变量内联使用,因此您需要使用参数进行映射以使其适用于此用例。
例如,格式字符串通常定义为以后使用...这是行不通的:
// Works
var myFormatString = 'This is an {0} for {0} purposes: {1}';
// Compiler warnings (a and b not yet defines)
var myTemplateString = `This is an ${a} for ${a} purposes: ${b}`;
所以要使用字符串插值,而不是格式字符串,您需要使用:
function myTemplate(a: string, b: string) {
var myTemplateString = `This is an ${a} for ${a} purposes: ${b}`;
}
alert(myTemplate('example', 'end'));
格式字符串的另一个常见用例是它们被用作共享资源。我还没有发现不使用eval 从数据源加载模板字符串的方法。