2016-05-02 10 views
0

Ich verwende die Bibliothek Q in einem Skript, das ich in einem Web-Arbeiter und in Node ausführen möchte. Wenn ich q.d.ts wie so Referenz:Verwendung von .d.ts. Dateien für JS für Knoten und einen Web-Worker

/// <reference path="../typings/q/Q.d.ts" /> 

if(importScripts != undefined && WorkerGlobalScope == undefined 
     && typeof module !== 'undefined' && module.exports){ 

    // We're in a Node (child) process 
    var Q = require("q") 
}else{ 
    // We're in a web-worker 
    importScripts('q'); 
} 

ich folgende Fehlermeldung erhalten, die schön in diesen answer erklärt:

error TS2300: Duplicate identifier 'Q'. 

aber wenn ich var Q = require("q") mit import Q = require("q") ersetzen, bekomme ich diesen Fehler, weil die Import-Anweisung innerhalb der if Klausel verschachtelt und nicht auf der obersten Ebene des Skripts:

An import declaration can only be used in a namespace or module. 

Gibt es eine Möglichkeit, Q in, so dass es mit require() und importScripts() des Web-Arbeiters funktioniert?

Antwort

1

Is there a way to require Q in so that it works with both node's require() and web-worker's importScripts()?

Sie müssen nur die Typ von Q importieren und dann laden die q lazily wenn benötigt. Also:

import _Q = require('q'); 
if(importScripts != undefined && WorkerGlobalScope == undefined 
     && typeof module !== 'undefined' && module.exports){ 

    // we're in a Node (child) process 
    var Q:typeof _Q = require("q") 
}else{ 

    importScripts('q'); 
} 

Mehr

Diese in den faulen Ladeabschnitt hier abgedeckt: https://basarat.gitbooks.io/typescript/content/docs/project/external-modules.html

+0

Dies funktioniert gut, wenn ein '.d.ts' Datei ein Modul deklariert, aber für diejenigen, die don‘ t, wie zum Beispiel ['require.d.ts'] (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/q/Qdts), ergibt sich das 'import_r = require (' requirejs ')' Fehler: 'Kann Modul 'requirejs' nicht finden.' – Jthorpe

+0

Ich habe [eine andere verwandte Frage] (http://stackoverflow.com/questions/38016793), die wäre toll, wenn Sie einen Blick darauf werfen könnten. Vielen Dank! – Jthorpe