Ich habe Datei my-module.ts
:Typoskript Anruf Signatur Ausgabe
declare module "my-module" {
interface main {
(string):string,
methodName():any,
propertyName:any,
objectName:Object
}
export default main;
}
und wenn es aus einer Datei mit test.ts
:
import * as MyModule from "my-module";
var s = MyModule('test');
Ich erhalte Fehler Cannot invoke an expression whose type lacks a call signature.
Warum es geschieht, und wie man es repariert?
UPDATE
Nach Vorschlag von Joe Clay, wenn wir den Code dies zu ändern:
declare module "my-module" {
interface main {
(string):string,
methodName():any,
propertyName:any,
objectName:Object
}
var myModule: main;
export default myModule;
}
Und dann versuchen, es wie folgt zu verwenden:
import myModule from "my-module";
var s = myModule('test');
Es erzeugt das folgende JavaScript:
var my_module_1 = require("my-module");
var s = my_module_1["default"]('test');
Welche wirft Fehler my_module_1.default is not a function
.
UPDATE
Die folgende Änderung beschlossen, das unmittelbare Problem:
declare module "my-module" {
interface main {
(string):string,
methodName():any,
propertyName:any,
objectName:Object
}
var myModule: main;
export = myModule; // <= Here's the change
}
und deren Verwendung:
import * as myModule from "my-module";
Doch diese mich mit einem anderen Problem dargestellt. Ich zeigte ein vereinfachtes Beispiel von my-module
, während der echte ein paar Klassen und enum
-s exportiert hat. Mit der Änderung wie oben können wir das nicht mehr tun.
Umgebungsklassen und enum
es sollen exportiert werden mit export enum Name{}
und export class Name
, aber diese Syntax nicht zulässig ist, wenn export = myModule
verwendet wird, einen Fehler erzeugt: An export assignment cannot be used in a module with other exported elements.
.
Wie korrigieren Sie diese jetzt? :)
Noch mehr Ärger, ich habe ein anderes Modul, das eine Eigenschaft des Typs my-module
hat, für die, wenn ich als properName: MyModule
deklariere, bekomme ich Cannot find name 'pgMinify'
. Ich verstehe nicht, was das bedeutet.
Das ist eine Ambient-Deklaration für ein vorhandenes Node.js-Modul, das in JavaScript geschrieben wird. Wie sonst sollte es dann erklärt werden? –
@ vitaly-t: Sie müssen etwas exportieren, das Ihre 'main' Schnittstelle implementiert, eher die Schnittstelle selbst, denke ich? Also, etwas wie 'var myModule: main; Export default myModule; '. –
Wenn ich das tue, kompiliert der Code, aber es generiert das: 'var my_module_1 = require (" my-module "); var s = my_module_1 ["default"] ('test'); 'was dann mit' my_module_1.default 'auslöst, ist keine Funktion'. –