2016-12-09 4 views
1

Ich versuche, neue Typen im Fenster Objekt zu definieren, wie webkitAudioContext zu erklären. Ich habe eine separate Datei window.d.ts genannt erstellt und im Innern, dass ich den Code unten hinzugefügt,Richtiger Weg Typoskript Definitionen für Fenster

interface Window { 
    AudioContext: Constructable; 
    webkitAudioContext: Constructable; 
} 

interface Constructable { 
    new(); 
} 

von einem anderen Modul I, wie unten die Definitionsdatei bin importieren,

/// <reference path="./window.d.ts" /> 

let contextClass = window.AudioContext || window.webkitAudioContext; 
let context = new contextClass(); 

Die beiden oben genannten Linien funktioniert gut.

Wenn ich die Defintion-Datei wie unten ändern,

declare module window { 
    export interface Window { 
     AudioContext: Constructable; 
     webkitAudioContext: Constructable; 
    } 

    interface Constructable { 
     new(); 
    } 
} 

Dann arbeitet es nicht. Was ist der richtige Weg um Definitionen zu definieren?

+0

Ich glaube nicht, dass Sie die Window-Deklaration in einen Namespace einfügen können, es würde nicht mehr mit dem Typ des standardmäßig bereitgestellten Fenstertyps übereinstimmen. – toskv

Antwort

1

Es gibt bereits existierende gemeinschaftliche Definitionen für AudioContext und webkitAudioContexthere. Wenn Sie nicht mit @types vertraut sind - Sie können mehr darüber lesen here, in Kürze - es enthält eine Menge von Definitionen für viele Bibliotheken (Sie können auch JQueryPromise als Typ verwenden).
Auch ist es good practice von global.d.ts Datei mit Ihrem eigenen definions Erstellen which'll Codes wie folgt enthalten:

declare var myCustomLib: any; 

Dann Sie global.d.ts-tsconfig.json hinzufügen sollen, so wird Compiler Ihrer Definitionen darüber im Klaren sein:

{ 
    "compilerOptions": { 
    "module": "commonjs", 
    "target": "es5", 
    "outDir": "./build" 
    }, 
    "exclude": ["node_modules"], 
    "files": ["./src/globals"] 
} 

Und wenn Sie konfrontiert sind Situationen, wenn Sie weiterentwickelten Funktionen zuzugreifen versuchen, Sie zu ihnen durch (... as any) Bau zugreifen können, wie folgt aus:

let Ctx = window.AudioContext || (window as any).webkitAudioContext; 

Ich hoffe, dass einige dieser Techniken Ihnen helfen werden.

Verwandte Themen