Van egy módja annak, hogy adjunk módszerek menet közben, hogy egy osztály segítségével géppel?

szavazat
17

Próbálom létrehozni valamiféle mixin módszer, amely hozzá módszereket a prototípus / osztály röptében de kapok hibák, mint például

Az ingatlan „greetName” nem létezik a típusú érték „üdvözlõ” bármely

és

Az ingatlan „greetName” nem létezik a típusú érték „üdvözlõ” bármely

amikor elindul a következő kódot.

class Greeter {
    greeting: string;
    constructor (message: string) {
        this.greeting = message;
    }
    greet() {
        return Hello,  + this.greeting;
    }
}

Greeter.prototype.greetName = function(name){
        return this.greet() + ' ' + name;
}

var greeter = new Greeter('Mr');

window.alert(greeter.greetName('Name'));

Ez valójában összeállítja az érvényes js és fut, mint várták. Van egy módja annak, hogy ezt a ki fordító figyelmeztetések / hibák?

A kérdést 02/10/2012 22:49
a forrás felhasználó
Más nyelveken...                            


6 válasz

szavazat
15

Ennek a megoldásnak az az előnye, így típusellenőrzés ha dinamikus hozzáadása egy módszert:

class MyClass {
    start() {

    }
}
var example = new MyClass();
// example.stop(); not allowed


interface MyClass {
  stop(): void;
}

MyClass.prototype['stop'] = function () {
    alert('Stop');
}
var stage2 = example;
stage2.stop();
Válaszolt 06/06/2013 17:02
a forrás felhasználó

szavazat
8

Van egy másik módja ennek.

Greeter["SomeProperty"] = function() {
     return "somevalue";
};

Ugyanúgy működik, és használja az ingatlant indexelő funkció javascript és géppel nem panaszkodik.

Válaszolt 19/12/2012 16:06
a forrás felhasználó

szavazat
8

Úgy kellene egy koncepció részleges osztályok, hogy ez a munka, amely jelenleg nem támogatott. Megmondom, hogy mit találtam jobban működik az ilyen típusú forgatókönyvek használata felületek helyett (Már programozás géppel körülbelül 6 hónapja - vagyok MS, de nem a géppel csapat)

Interfészek nyújthatók a tény után egyszerűen definging módszerekkel te hozzátéve, hogy a felület. Példaként erre, ha telepíti a jQuery plugint akkor szeretnénk, hogy újra meghatározzák a IJQuery & IJQueryUtil interfész, ami a bővítmények további módszereket. Ettől a ponttól hívhatja a plugins módszerek révén $ .plugin () és a géppel boldog lesz.

Válaszolt 02/10/2012 23:22
a forrás felhasználó

szavazat
1

Hasonló a @Fenton például, de anélkül, hogy a csomós dolgok:

class MyClass {
    start() {
    }
}
MyClass.prototype['stop'] = function () {
    alert('Stop');
}

interface MyClass {
    stop(): void;
}

var example = new MyClass();
example.stop(); // Allowed!!!
Válaszolt 26/05/2018 14:16
a forrás felhasználó

szavazat
0

Így RxJScsinálja

import {Observable} from "./observable"; // which is Greeter in your case 


declare module "./observable" {
    interface Observable<T> {
        map<U>(f: (x: T) => U): Observable<U>;
    }
}

Observable.prototype.map = function (f) {

}

Ez az úgynevezett modul rosszabbodhatnak.

Válaszolt 23/10/2018 00:21
a forrás felhasználó

szavazat
0

Miután végrehajtása dinamikus módszerek és tulajdonságok osztályok, ez volt a megoldás tudtam menni, hogy megakadályozzák géppel fordítót panaszkodott:

...
window.alert(greeter['greetName']('Name'));

Alapvetően, használja a konzol eljárás tulajdon accessors .

Válaszolt 26/08/2016 01:56
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more