字符串插值
注意:从 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'));
您可能还考虑串插,这是一个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
.