字符串插值
注意:从 TypeScript 1.4 开始,TypeScript 中可以使用字符串插值:
var a = "Hello";
var b = "World";
var text = `${a} ${b}`
这将编译为:
var a = "Hello";
var b = "World";
var text = a + " " + b;
字符串格式
JavaScriptString
对象没有format
功能。 TypeScript 不会添加到本机对象,因此它也没有String.format
功能。
对于 TypeScript,您需要扩展 String 接口,然后需要提供一个执行:
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'));
You could还考虑字符串插值(模板字符串的一项功能),这是 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
.