【发布时间】:2017-07-19 00:24:33
【问题描述】:
我正在尝试将 ES5 的 tagged template literal 与 typescript 一起使用,但似乎 type script 并没有完全支持它。我有以下代码。
class TemplateLiterals {
age: number = 24;
name: 'Luke Skywalker'
private tag(strings: string[], personExp, ageExp) :string{
var str0 = strings[0]; // "that "
var str1 = strings[1]; // " is a "
var ageStr;
if (ageExp > 99) {
ageStr = 'centenarian';
} else {
ageStr = 'youngster';
}
return str0 + personExp + str1 + ageStr;
}
toString() {
return this.tag `that ${ this.name } is a ${ this.age }`;
}
}
在toString 方法中,打字稿向我显示以下错误。
Argument of type 'TemplateStringsArray' is not assignable to parameter of type 'string[]'.
Property 'push' is missing in type 'TemplateStringsArray'.
我不知道为什么它向我显示此错误。根据 mozilla 的文档“标签函数的第一个参数包含一个字符串值数组。”所以它应该接受字符串数组。但实际的期望是TemplateStringsArray。不确定如何以及何时定义 interface TemplateSringsArray。目前我使用TemplateSringsArray 类型来避免这个错误。谁能解释发生了什么。谢谢。这是playground。
【问题讨论】:
标签: javascript typescript template-literals