__extends继承Array时,不符合预期
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 38/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- typescript
- Ambito
- tooling
Direzione di ricerca
Inizia con l’helper __extends mostrato nell’issue e riproduci l’esempio della sottoclasse di Array. Confronta il suo comportamento con l’approccio _wrapNativeSuper(Array) di Babel, quindi verifica che la sottoclasse mantenga il comportamento previsto di toString e width dopo la compilazione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
源码:
class B extends Array{
get width(): number {
return 20;
}
toString(): string {
return "class B";
}
}
const b1 = new B();
b1.push("kkkkk")
console.log(b1.toString());
console.log(b1.width);
//class B
//20
转译代码
(function(){
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var B = /** @class */ (function (_super) {
__extends(B, _super);
function B() {
return _super !== null && _super.apply(this, arguments) || this;
}
Object.defineProperty(B.prototype, "width", {
get: function () {
return 20;
},
enumerable: false,
configurable: true
});
B.prototype.toString = function () {
return "class B";
};
return B;
}(Array));
var b1 = new B();
b1.push("kkkkk")
console.log(b1.toString());
console.log(b1.width);
})();
// kkkkk
// undefined
b1.toString()走了 原生 Array 的 toString,原型链已经乱了。
对照babel的转译代码,得到的解决方案
// babel _wrapNativeSuper方法
// }(Array));
}(_wrapNativeSuper(Array)));
现在,他可以正常的工作了。
- Lingua principale
- TypeScript
- Stelle
- 1.3k
- Fork
- 146
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di microsoft/tslib
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 1/100
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 15/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
-
Performance improvementAperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
Tutte le issue di microsoft/tslib
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
I maintainer di solito rispondono entro 1 giorno
-
Signals (Failure Detector): a tool call and its own execution are reported as a repeated callAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
platformatic/mcp#208 ·
I maintainer di solito rispondono entro 1 giorno
-
🐛 bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
margelo/react-native-vision-camera#4211 ·
I maintainer di solito rispondono entro 4 giorni