У меня есть этот тип модуля Node.js, написанный на JavaScript:Объявление JavaScript расширенных функций в машинописных
function main(options) {
return "some string";
}
main.methodName = function() {
// implementation;
};
main.objectName = {
// a namespace;
};
main.propertyName = 123;
module.exports = main;
Что такое правильный способ объявления такого интерфейса в машинописном?
РАЗЪЯСНЕНИЕ
Я спрашиваю о том, как правильно объявить такой интерфейс в машинописном для существующего модуля Node.js, поэтому он может быть использован правильно из машинопись файлов, а не как повторно реализовать такие интерфейсов в TypeScript.
UPDATE
По предложению от @toskv, я добавил следующий интерфейс:
declare module "my-module" {
// Default library interface
interface main {
(options?:{}):string,
methodName():any,
propertyName:any,
objectName:Object
}
export default main;
}
Но если я использую это так:
import * as myModule from "my-module";
var s = myModule({});
Тогда я получение ошибка Cannot invoke an expression whose type lacks a call signature.
.
Любая идея, почему?
Машинопись является подмножеством JavaScript, что означает этот код, который действителен JavaScript, также действительны машинопись. –
@Gothdo, в то время как это правда, TypeScript заставляет больно расширять объекты после того, как их типы определены из-за статического ввода. Как добавление свойств функции. Гораздо проще и чище преобразовать код в класс. :) – toskv