Typescript 如何创建简单类的环境声明

Typescript 如何创建简单类的环境声明,typescript,Typescript,我有一个简单的外部项目(),我想创建一个环境声明(这显然是错误的): 我的问题是如何更改声明,以便像这样使用撤销管理器 var UndoManager = require('undo-manager'); // some more imports may be needed to get Command, but how? undoManager = new UndoManager(); function addCmd(cmd: Command) { undoManager.add(

我有一个简单的外部项目(),我想创建一个环境声明(这显然是错误的):

我的问题是如何更改声明,以便像这样使用撤销管理器

var UndoManager = require('undo-manager');
// some more imports may be needed to get Command, but how?

undoManager = new UndoManager();

function addCmd(cmd: Command) {
    undoManager.add(cmd);
}
addCmd({
    redo: () => doSomething(),
    undo: () => undoSomething()
});

定义文件应该是

declare module "undo-manager" {
    module UndoManager {
        export interface Command {
            redo(): any;
            undo(): any;
        }
    }
    class UndoManager {
        setCallback(f: Function): void;
        undo(): void;
        redo(): void;
        hasUndo(): boolean;
        hasRedo(): boolean;
        add(cmd: UndoManager.Command): void;
    }

    export = UndoManager
}
这样用吧

import * as UndoManager from 'undo-manager'

const um = new UndoManager()

function addCmd(cmd: UndoManager.Command) {
    um.add(cmd)
}
两点意见:

1-与定义文件中列出的方法相比,
UndoManager
中提供的公共方法似乎更多


2-既然我们已经做到了,那么最好您将这个定义文件贡献给(或者,更好的是,让代码作者维护它)

不幸的是,这不起作用。因为javascript模块
UndoManager
只导出类
UndoManager
:在javascript中,您说
var UndoManager=require('undo-manager');var undoManager=新的undoManager()。在Typescript模块中,我可以说
export=UndoManager
,但是,见鬼,如何也导出
命令
界面???好的。完全修改了上面的答案(并测试了它:))太好了,现在它可以正常工作了。诀窍似乎是添加与导出类同名的子模块。我想这也适用于类构造函数的属性。是的。
模块
/
名称空间
“技巧”实际上非常常见于“扩充”现有定义。可以在类中声明构造函数签名。
import * as UndoManager from 'undo-manager'

const um = new UndoManager()

function addCmd(cmd: UndoManager.Command) {
    um.add(cmd)
}