当天晚些时候,我最终遇到了另一个问题,这让我明白了这里发生了什么。从上面看,这里是...
TypeScript 构建在 JavaScript 之上,因此就像 @Nypan 所说 JavaScript 是有效的 TypeScript。因此,这些差异很容易被忽视。
像这样的 JavaScript 函数通过“this”引用函数执行的范围。
var f = function (postFix) {return this + postFix};
要添加 TypeScript 语法,您需要定义类型
var f = function (postFix: string): string {return this + postFix};
在这两种情况下,this 都指的是函数的范围,就像经典的 JavaScript 一样。然而,当我们这样做时,事情就会发生变化......
var f = (postFix: string): string {return this + postFix};
//or more correctly
var f = (postFix: string): string => {return this + postFix};
当您从参数前面删除该函数时,它就不再是经典函数了。它变成了“胖箭头”函数,显然即使不使用“=>”语法也是如此。在上面的示例中,“this”现在指的是该函数所在的类,就像在 C# 中一样。
在我尝试将函数分配给字符串原型时,我省略了 function 关键字,因此它被解释为“Fat Arrow”函数,并尝试将其绑定到类的范围。然而,该函数不存在于类中,并导致错误“_this 未定义”。
当我添加“function”关键字时,该函数将按照我的预期进行解释并正常工作。
interface String {
format: () => string;
}
String.prototype.format = function () : string {
var formatted = this;
for (var i = 0; i < arguments.length; i++) {
formatted = formatted.replace(
RegExp("\\{" + i + "\\}", 'g'), arguments[i].toString());
}
return formatted;
};