Я пытаюсь набрать модуль UMD (который мне не принадлежит, поэтому я не могу его изменить) для проекта DefiniteTyped, который имеет что-то вроде этого (с реальными функциями, конечно):
function getModule() {
function fn1() {}
function fn2() {}
fn1.fn2 = fn2;
return fn1.fn1 = fn1;
}
if (typeof define === "function" && define.amd) {
define(getModule());
} else if (typeof module !== "undefined" && module.exports) {
module.exports = getModule();
} else {
this.moduleName = getModule();
}
Используя шаблон module-function.d.ts , у меня пока есть это:
export as namespace moduleName;
export = fn1;
declare function fn1(): void;
declare namespace fn1 {
function fn2(): void;
}
Затем я использовал dts-gen для генерацииФайл .d.ts для меня, чтобы попытаться выяснить, как снова объявить функцию fn1
в пространстве имен fn1
, и получил это:
/** Declaration file generated by dts-gen */
export = moduleName;
declare function moduleName(): void;
declare namespace moduleName {
// Circular reference from moduleName
const fn1: any;
function fn2(): void;
}
Однако, когда я попытался объединить эти два вследующий код я получил ошибку 'fn1' is referenced directly or indirectly in its own type annotation.
.
export as namespace moduleName;
export = fn1;
declare function fn1(): void;
declare namespace fn1 {
function fn2(): void;
const fn1: any;
}
Я не хочу делать следующее, потому что тогда это не будет означать, что вы можете сделать require('moduleName').fn1.fn1.fn1.fn2
(или любое число fn1
с.
export = moduleName;
declare function moduleName(): void;
declare namespace moduleName {
function fn1(): void;
function fn2(): void;
}
Как бы я набрал этот модуль?