微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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;
};

原文地址:https://www.jb51.cc/js/152766.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐