Javascript 扩展TypeScript中的基本类型,错误:"_这没有定义……”;

Javascript 扩展TypeScript中的基本类型,错误:"_这没有定义……”;,javascript,inheritance,prototype,typescript,Javascript,Inheritance,Prototype,Typescript,我正在尝试用TypeScript重写一些JavaScript代码。其中一些代码引用了我添加到字符串对象原型中的扩展 String.prototype.format=函数(){ var格式化=这个; for(var i=0;i字符串; } String.prototype.showString=():String{ 归还这个; }; 除了此错误,因为“\u此未定义…” 我尝试过的其他事情是创建一个新类来扩展字符串 导出类MoreString扩展字符串{ } 但是,这也不起作用,因为您只能扩展类

我正在尝试用TypeScript重写一些JavaScript代码。其中一些代码引用了我添加到字符串对象原型中的扩展

String.prototype.format=函数(){
var格式化=这个;
for(var i=0;i
然而,将其添加到类型脚本中非常具有挑战性

我看到过这样的例子,您声明了一个基本接口的扩展,然后将一个函数分配给原型,以匹配接口并提供您的功能。就像这样

接口字符串{
showString:()=>字符串;
}
String.prototype.showString=():String{
归还这个;
};
除了此错误,因为“\u此未定义…”

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

导出类MoreString扩展字符串{
}
但是,这也不起作用,因为您只能扩展类,而string/string不是类,而是内置类型


扩展字符串和访问扩展方法的最简单方法是什么?

在完全相似的情况下,我这样做:

interface String {
    endsWith(str);
    startsWith(str);

}
这只是为了满足编译器的需要。您实现的方法与javascript中的方法完全相同


希望这会有所帮助。

我认为这与stride的目的是一样的,但您只需在javascript中扩展它(javascript是有效的typescript),然后为新功能提供接口

简短示例:

String.prototype.myExtension = function () {
   return this + " something."
};

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

alert("test".myExtension());

那天晚些时候,我遇到了另一个问题,这让我看到这里发生了什么。从上面看,这里是

TypeScript是建立在JavaScript之上的,所以@Nypan说JavaScript是有效的TypeScript。因此,这些差异很容易被忽略

像这样的JavaScript函数引用函数在其中执行的范围,并带有“this”

var f=function(postFix){返回this+postFix};
要添加类型脚本语法,您需要定义类型

var f=function(postFix:string):string{returnthis+postFix};
在这两种情况下,这都是指函数的范围,就像经典JavaScript一样。然而,当我们这样做的时候,事情会改变

var f=(后缀:string):string{returnthis+postFix};
//或者更准确地说
var f=(后缀:string):string=>{returnthis+postFix};
当您从参数前面删除函数时,它不再是经典函数。它变成了一个“胖箭头”函数,显然甚至不用“=>”语法。在上面的例子中,“this”现在指的是函数所在的类,类似于C#

在我尝试将一个函数分配给字符串的原型时,我省略了function关键字,因此它被解释为一个“胖箭头”函数,并尝试将其绑定到类的范围。但是,该函数不存在于类中,并导致错误“\u此函数未定义”

当我添加“function”关键字时,函数被解释为我想要的,并且工作正常

接口字符串{
格式:()=>字符串;
}
String.prototype.format=函数():String{
var格式化=这个;
for(var i=0;i
您需要像这样扩展字符串接口:

interface String {
    stringFormat(...args: string[]): string;
}
您需要像这样实现

module Utilities {
    String.prototype.stringFormat = function (): string {
        var args = arguments;
        return this.replace(/\{\{|\}\}|\{(\d+)\}/g, function (m, n) {
            if (m == "{{") { return "{"; }
            if (m == "}}") { return "}"; }
            return args[n];
        });
    }
}
实施来源:

但在代码中的何处添加此定义?因为我得到的属性“myExtension”在类型“String”上不存在,所以它不是编译。我在模块定义中有这段代码。“模块实用程序”的重要性。。。非常感谢。