javascript – 扩展TypeScript中的基本类型,错误:“_this未定义…”

前端之家收集整理的这篇文章主要介绍了javascript – 扩展TypeScript中的基本类型,错误:“_this未定义…”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在TypeScript中重写一些我的 JavaScript代码.这些代码中的一些引用了我添加到字符串对象原型的扩展.
String.prototype.format = function () {
    var formatted = this;
    for (var i = 0; i < arguments.length; i++) {
        formatted = formatted.replace(
            RegExp("\\{" + i + "\\}",'g'),arguments[i].toString());
    }
    return formatted;
};

但是用类型脚本添加这一点是非常具有挑战性的.

我已经看到了一些示例,您可以声明一个基本界面的扩展,然后为原型分配一个函数来匹配该接口并提供您的功能.像这样…

interface String {
    showString: () => string;
}

String.prototype.showString = (): string {
    return this;
};

除了这个错误,因为“_this没有定义…”

我尝试的其他事情是创建一个新的类来扩展字符串…

export class MoreString extends string {

}

但是这也不行,因为你只能扩展类,string / String不是类,而是内置的类型.

扩展String和访问我的扩展方法的最简单的方法是什么?

解决方法

当天晚些时候,我遇到另一个问题,让我看到这里发生了什么.从顶部,这里是…

TypeScript构建在JavaScript之上,所以像@Nypan说JavaScript是有效的TypeScript.因为这个差异很容易忽视.

像这样的JavaScript函数引用函数执行的范围与“this”.

var f = function (postFix) {return this + postFix};

添加TypeScript语法,您将定义类型

var f = function (postFix: string): string {return this + postFix};

在这两种情况下,这就是传统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”函数,并尝试将其绑定到类的范围.然而,功能不存在于类中并导致错误“_这不被定义”.

当我添加功能”关键字时,该功能被解释为我的意图并且正常工作.

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 + "\\}",arguments[i].toString());
    }
    return formatted;
};

猜你在找的JavaScript相关文章