У меня есть файл my-module.ts
:машинописи вопрос о подписи вызова
declare module "my-module" {
interface main {
(string):string,
methodName():any,
propertyName:any,
objectName:Object
}
export default main;
}
и при использовании его из файла test.ts
:
import * as MyModule from "my-module";
var s = MyModule('test');
Я получаю ошибку Cannot invoke an expression whose type lacks a call signature.
Почему это происходит, и как это исправить?
UPDATE
По предложению от Джо Клэй, если мы изменим код так:
declare module "my-module" {
interface main {
(string):string,
methodName():any,
propertyName:any,
objectName:Object
}
var myModule: main;
export default myModule;
}
, а затем попытаться использовать его как это:
import myModule from "my-module";
var s = myModule('test');
Он генерирует следующий JavaScript:
var my_module_1 = require("my-module");
var s = my_module_1["default"]('test');
Какая ошибка my_module_1.default is not a function
.
UPDATE
Следующая перемена решить непосредственную проблему:
declare module "my-module" {
interface main {
(string):string,
methodName():any,
propertyName:any,
objectName:Object
}
var myModule: main;
export = myModule; // <= Here's the change
}
и использовать его:
import * as myModule from "my-module";
Однако это подарил мне еще одну проблему. Я показал упрощенный пример my-module
, в то время как у реального есть несколько классов и enum
-s для экспорта. Однако с изменением, как выше, мы больше не можем этого делать.
Окружающие классы и enum
-s предполагается экспортировать с помощью export enum Name{}
и export class Name
, но этот синтаксис отвергнут при export = myModule
используется, производя ошибку: An export assignment cannot be used in a module with other exported elements.
.
Как исправить это сейчас? :)
Еще больше проблем, у меня есть еще один модуль, который имеет свойство типа my-module
, для которого, если я объявляю properName: MyModule
, я получаю Cannot find name 'pgMinify'
. Я не понимаю, что это значит.
Это эмбиентное объявление для существующего модуля Node.js, написанного на JavaScript. Как иначе это должно быть объявлено тогда? –
@ vitaly-t: Вам нужно экспортировать что-то, что реализует ваш 'main' интерфейс, а сам интерфейс, я думаю? Итак, что-то вроде 'var myModule: main; экспортировать default myModule; '. –
Если я это сделаю, код компилируется, но он генерирует это: «var my_module_1 = require (« my-module »); var s = my_module_1 ["default"] ('test'); 'который затем выбрасывает с' my_module_1.default, не является функцией'. –