Javascript 扩展TypeScript中的基本类型,错误:"_这没有定义……”;
我正在尝试用TypeScript重写一些JavaScript代码。其中一些代码引用了我添加到字符串对象原型中的扩展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扩展字符串{ } 但是,这也不起作用,因为您只能扩展类
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”上不存在,所以它不是编译。我在模块定义中有这段代码。“模块实用程序”的重要性。。。非常感谢。