Erweiterung instance/static Funktionen auf vorhandene Prototypen mit Typoskript

Ich habe vor kurzem eine Frage gestellt über Typoskript Fähigkeit erweitern bestehende Prototypen in der JavaScript-API (hier: Die Ausweitung Objekt.Prototyp mit Typoskript).

War ein Fehler, die hat sich inzwischen geklärt, da der TypeScript 0.9.0 Alpha (die jetzt enthält Generika...TOLL :-))

Im Typoskript, die Schnittstellen sind offen, so dass, wenn Sie sich in lib.d....ts, finden Sie eine Schnittstelle, die definiert, den Vertrag für JavaScript-Objekt-API. Sie sollten auch sehen, eine Deklaration für das Objekt, das definiert Objekt die static-Funktionen.

Der Einfachheit halber, hier sind Sie:

//Pulled from lib.d.ts

interface Object {
    toString(): string;
    toLocaleString(): string;
    valueOf(): Object;
    hasOwnProperty(v: string): bool;
    isPrototypeOf(v: Object): bool;
    propertyIsEnumerable(v: string): bool;
    [s: string]: any;
}

declare var Object: {
    new (value?: any): Object;
    (): any;
    (value: any): any;
    prototype: Object;
    getPrototypeOf(o: any): any;
    getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor;
    getOwnPropertyNames(o: any): string[];
    create(o: any, properties?: PropertyDescriptorMap): any;
    defineProperty(o: any, p: string, attributes: PropertyDescriptor): any;
    defineProperties(o: any, properties: PropertyDescriptorMap): any;
    seal(o: any): any;
    freeze(o: any): any;
    preventExtensions(o: any): any;
    isSealed(o: any): bool;
    isFrozen(o: any): bool;
    isExtensible(o: any): bool;
    keys(o: any): string[];
}

So, meine Vorherige Frage wurde über die Erweiterung der Schnittstelle für das Objekt, etwa so:

interface Object {
    GetFoo(): Foo;
}

Object.prototype.GetFoo = function() {
    return new Foo();
}

Wie gesagt, dies funktioniert wie von Typoskript 0.9.0.

Aber jetzt möchte ich auch in der Lage sein, statische Funktionen, um das Objekt, vollkommen legal in reinem JavaScript.

In JavaScript würde ich tun:

Object.FooAgain = function () {
    //Yes, it's foo again!
}

Aber ich kann nicht scheinen, um in der Lage sein, dies zu erreichen in Typoskript.

Zuerst habe ich versucht, um zu sehen, wenn das Objekt, in dem die Erklärung war offen (wie bei interfaces):

declare var Object: {
    FooAgain(): void;
}

Object.FooAgain = function () {
    //TS doesn't like this, and Object.FooAgain isn't available in intellisense.
}

Ich habe auch versucht (ich habe das in einem anderen Artikel, und dachte, es war einen Versuch Wert).

export declare var Object: {
}

aber das scheint alles zu brechen noch mehr...

Zugegebenermaßen das Problem kann auch behoben wurde, in TS 0.9.0 (ich bin bei der Arbeit, damit habe ich nicht wirklich versucht, es zu voll).

Kann jemand etwas Licht in diese Schuppen?

  • Wäre es angemessen zu ändern, die richtige Antwort, wie die Antwort hat sich verändert, seit die Frage erstellt wurde?
  • Ändern Sie die akzeptierte Antwort auf die eine, die akzeptierte Antwort empfiehlt.
  • Ihr Wunsch ist mein Befehl.
  • Vielen Dank für die Verbesserung der Qualität von dieser Website 🙂
InformationsquelleAutor series0ne | 2013-05-29
Schreibe einen Kommentar