Nasıl bir taban türü için bir yöntem eklemek için, Diziyi demek? Küresel modülde bu tanınacak
interface Array {
remove(o): Array;
}
ama nereye gerçek uygulama koymak?
Nasıl bir taban türü için bir yöntem eklemek için, Diziyi demek? Küresel modülde bu tanınacak
interface Array {
remove(o): Array;
}
ama nereye gerçek uygulama koymak?
Sen Array uzatmak için prototip kullanabilirsiniz:
interface Array<T> {
remove(o: T): Array<T>;
}
Array.prototype.remove = function (o) {
// code to remove "o"
return this;
}
declare globaltypescript 2.1 itibariyle bilet gibi görünüyor. Not Array.prototypetiptedir any[], böylece fonksiyon uygulama tutarlılık açısından kontrol yapmak istiyorsanız, iyi bir genel tür parametresi ne kendinizi ekleyin.
declare global {
interface Array<T> {
remove(elem: T): Array<T>;
}
}
if (!Array.prototype.remove) {
Array.prototype.remove = function<T>(elem: T): T[] {
return this.filter(e => e !== elem);
}
}
Typescript 1.6 itibaren, "doğal" dahili türleri gibi keyfi ifadeler uzatabilir.
Typescript 1.6 yapıcı işlevi hesaplar rasgele ifade uzanan sınıfları için destek sağlar. Bu yerleşik türleri artık sınıf beyanlarında uzatılabilir anlamına gelir.
bir sınıfın uzanan maddesi, daha önce belirtilen bir tip referans gerekmez. Artık, isteğe bağlı olarak bir tip bağımsız değişken listesi takip bir ifade kabul eder. İfade tipi madde uzanan belirtilen tür bağımsız değişkenleri sayısı tür parametreleri aynı sayıda, en az bir yapı imza ile yapıcı işlevi türü olmalıdır. uygun yapı imza (ler) in geri tip sınıfı örneği türü devraldığı baz türüdür. Etkili, bu maddeyi uzanır gerçek sınıflar ve "sınıf" gibi ifadeler hem de belirtilmesine olanak tanır.
// Extend built-in types
class MyArray extends Array<number> { }
class MyError extends Error { }
// Extend computed base class
class ThingA {
getGreeting() { return "Hello from A"; }
}
class ThingB {
getGreeting() { return "Hello from B"; }
}
interface Greeter {
getGreeting(): string;
}
interface GreeterConstructor {
new (): Greeter;
}
function getGreeterBase(): GreeterConstructor {
return Math.random() >= 0.5 ? ThingA : ThingB;
}
class Test extends getGreeterBase() {
sayHello() {
console.log(this.getGreeting());
}
}
class MyArray<T> extends Array<T> {
remove: (elem: T) => Array<T> = function(elem: T) {
return this.filter(e => e !== elem);
}
}
let myArr = new MyArray<string>();
myArr.remove("some");
Bu tutanak v2.2.1 ile benim için çalışıyor!
Rikki Gibson'ın yanıta ekleme,
export{}
declare global {
interface Array<T> {
remove(elem: T): Array<T>;
}
}
if (!Array.prototype.remove) {
Array.prototype.remove = function<T>(elem: T): T[] {
return this.filter(e => e !== elem);
}
}
İhracat olmadan {} TS hatası "küresel kapsam için Augmentation'lar sadece doğrudan dış modülleri veya ortam modül beyanlarında iç içe olabilir."