javascript - 如何在 TypeScript 声明源文件中声明嵌套函数?

标签 javascript typescript

我正在为 KeyboardJS 构建声明源文件. API 是从加载 JavaScript 文件时实例化的静态对象 (KeyboardJS) 引用的。 API 的一些方法嵌套在其他方法下。例如:

KeyboardJS.clear(keyCombo);

KeyboardJS.clear.key(key);

这是我的接口(interface)定义:

interface KeyboardJSStatic {
    enable(): void;
    disable(): void;
    activeKeys(): string[];
    on(keyCombo:string, onDownCallback?: (keyEvent: Event, keysPressed: string[], keyCombo: string) => {}, onUpCallback?: (keyEvent: Event, keysPressed: string[], keyCombo: string) => {}): KeyboardJSBinding;
    clear(keyCombo: string): void;
    clear.key(keyName: string): void;
    locale(localeName: string): KeyboardJSLocale;
    locale.register(localeName: string, localeDefinition: KeyboardJSLocale): void;
    macro(keyCombo:string , keyNames: string[]): void;
    macro.remove(keyCombo: string): void;
    key: KeyboardJSKey;
    combo: KeyboardJSCombo; 
}

Visual Studio 2012 的 TypeScript 插件在 clear.key 行上生成错误,建议在句号所在的位置使用分号。有没有人用类似的场景构建定义文件?谢谢!

最佳答案

您可以像这样在类型上声明调用签名:

interface KeyboardJSStatic {
    // ...
    clear: {
        (keyCombo: string): void; // Call signature
        key(keyName: string): void; // Method
    };
    // ...
}

var n: KeyboardJSStatic;
n.clear('a'); // OK
n.clear.key('b'); // OK

关于javascript - 如何在 TypeScript 声明源文件中声明嵌套函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14369408/

相关文章:

javascript - JSON.stringify() 与 array.join (',' )

typescript - 在 TypeScript 中使用导入类型的环境声明

Typescript、ReduxJS 工具包 - createSlice 生成的 reducer 不可分配给类型 'Reducer<unknown, AnyAction>' 的参数

javascript - 查找 json 对象中存在的键

javascript - 如何在 ngModules 之间共享服务和状态

javascript - 如何添加顶部填充以平滑滚动

javascript - winston 的多个日志文件具有最大大小和每日轮换

angular - 延迟加载获取当前路由模块

javascript - 返回由两个具有 RxJS 依赖关系的不同 Observable 组成的合并对象

javascript - 如何从多个数组中提取来构建列表?