2016-08-08 11 views
1

Ich versuche, eine Klasse in den globalen Bereich zu importieren, und ich bin in der Lage, es zu tun, aber dann, wenn ich versuche, die Klasse zu erweitern Ich erhalte eine Fehlermeldung, dass:Import-Klassen in den globalen Bereich

Type 'any' is not a constructor function type.

So ist das, was ich diesen Fehler zu bekommen tue:

main.ts

const MyClass = require('./core/MyClass'); 

class MyTestClass extends MyClass { 

} 

ich habe dann versucht import MyClass from './core/MyClass', daß anstelle eines Co nst, aber das scheint, als ob es nur im Rahmen der aktuellen Datei ist, die mir auch nicht hilft.

Kern/MyClass.ts

export default class MyClass { 

} 

Ich habe mit Namespaces versucht, die so funktioniert, ich in Typoskript wollen, aber einmal kompiliert in JavaScript, um die Namespace nicht definiert ist.

Gibt es eine Möglichkeit, meine Klasse in den globalen Geltungsbereich zu importieren und nicht den oben genannten Fehler beim Erweitern der Klasse zu erhalten?

+0

Sie können immer 'window.MyClass = MyClass' tun, wenn Sie globale Variable im Browser deklarieren möchten. – Maxx

+0

tun, dass ich bekomme 'Name nicht gefunden 'MyClass'.' –

+0

ist es mit' import' oder 'require'? – Maxx

Antwort

1

In Ihrem Code Sie haben:

require('./core/MyClass'); 

Wenn Sie dann nicht import/export in Ihrer Datei haben Typoskript übernimmt die Datei global ist. Abhängig von Ihrer Verwendung der Datei (z. B. in NodeJS oder bei Verwendung eines Bündlers wie Webpack) ist die Datei immer noch ein Modul und nicht global.

Cool, mit dieser aus dem Weg, können Sie etwas auf der Welt setzen wie:

export default class MyClass { 
} 
(global as any).MyClass = MyClass; 

Seien Sie sicher, node.d.ts enthalten global zu bekommen.

Mehr

Und natürlich würde ich auch gegen default warnen mag als die const/require Sie geschrieben hat, ist auch falsch. Sie benötigen etwas wie const {default} = require('module/foo');. Mehr: https://basarat.gitbooks.io/typescript/content/docs/tips/defaultIsBad.html

+0

Vielen Dank, das funktioniert perfekt! Ich suche jetzt seit ein paar Tagen danach! –

Verwandte Themen