TypeScript:扩展本机类会产生错误的原型 问题:

TypeScript:扩展本机类会产生错误的原型 问题:,typescript,Typescript,在TypeScript中,当我执行以下操作时: B类{…} 类A扩展了B{…} 我可以正常地调用原型A的方法/getter/setter,不会出错 但是,当我对本机类执行相同的操作时: A类扩展数组{…} 当我调用原型A的方法/getter/setter时,它抛出,因为原型A中的属性都未定义 为什么? 例子 鉴于此工作代码: 类动物{ 受保护名称:字符串; 保护年龄:数字; 构造函数(名称:字符串,年龄:数字){ this.name=名称; } 吃{ log(`${this.name}已被吃

在TypeScript中,当我执行以下操作时:

B类{…}
类A扩展了B{…}
我可以正常地调用原型A的方法/getter/setter,不会出错

但是,当我对本机类执行相同的操作时:

A类扩展数组{…}
当我调用原型A的方法/getter/setter时,它抛出,因为原型A中的属性都未定义

为什么?

例子 鉴于此工作代码:

类动物{
受保护名称:字符串;
保护年龄:数字;
构造函数(名称:字符串,年龄:数字){
this.name=名称;
}
吃{
log(`${this.name}已被吃掉。`);
}
睡眠(){
log(`${this.name}已休眠。`);
}
}
狗类动物{
构造函数(…参数:[字符串,数字]){
超级(…args);
}
树皮(){
log(`${this.name}已发出吠声。`);
}
}
const dog=新狗('doggo',2);
狗吃;
狗吠();
它将被传送到:

var uu extends=(this&&this.u extends)| |(函数(){
var extendStatics=功能(d,b){
extendStatics=Object.setPrototypeOf||
({uuuuu proto}数组和函数(d,b){d.{uuuu proto}的实例[]}||
函数(d,b){for(var p in b)如果(b.hasOwnProperty(p))d[p]=b[p];};
返回extendStatics(d,b);
};
返回函数(d,b){
扩展静态(d,b);
函数{this.constructor=d;}
d、 prototype=b==null?对象。创建(b):(_uu.prototype=b.prototype,new_u());
};
})();
var Animal=/**@class*/(函数(){
功能动物(名称、年龄){
this.name=名称;
}
Animal.prototype.eat=函数(){
log(this.name+“has eat.”);
};
Animal.prototype.sleep=函数(){
log(this.name+“已睡眠”);
};
返回动物;
}());
var Dog=/**@class*/(函数(_super){
__扩展(狗,超级);
功能狗(){
var args=[];
对于(var_i=0;_i狗吠()我看到您的目标是ES5。当传输到ESNext时,您的代码将完全按照预期工作。如果您需要以ES5为目标并扩展本机类型(例如
数组
),则必须在构造函数中设置您自己类的原型()

类列表扩展数组{
构造函数(…项:T[]){
超级(…项目);
// ...
Object.setPrototypeOf(this,Object.create(List.prototype));/(Object as any).setPrototypeOf
}
// ...
}
在控制台中检查控制台 .

另请查看如何扩展本机类型,如
Array