Interface Typescript:使用单个函数处理其他JavaScript库

Interface Typescript:使用单个函数处理其他JavaScript库,interface,module,typescript,Interface,Module,Typescript,用打字机,我明白了。尽管考虑只需要来自库的单个函数,或者库仅是单个(可能重载)函数(例如)的情况。必须使用模块名-dot-函数名调用函数相当冗长: 在文件merge.d.ts中: declare module "merge" { export function merge(o: Object, ...args: Object[]): Object; export function merge(isDeep: boolean, o: Object, ...args: Object[

用打字机,我明白了。尽管考虑只需要来自库的单个函数,或者库仅是单个(可能重载)函数(例如)的情况。必须使用模块名-dot-函数名调用函数相当冗长:

在文件
merge.d.ts
中:

declare module "merge" {
    export function merge(o: Object, ...args: Object[]): Object;
    export function merge(isDeep: boolean, o: Object, ...args: Object[]): Object
}
在某些测试文件中:

///<reference path="merge.d.ts"/>
import merge = require('merge');
merge.merge({x: 1}, {y: 2});
///
导入合并=需要(“合并”);
merge.merge({x:1},{y:2});

是否有其他方法可以有效地将第3行的
merge.merge
替换为
merge
,同时仍在检查类型?

使用
export=
。以下是完整的示例:

declare module "merge" {

    interface Merge {
        merge(o: Object, ...args: Object[]): Object;
        merge(isDeep: boolean, o: Object, ...args: Object[]): Object;
    }
    var merge:Merge;
    export = Merge;
}

ES6 destructuring将为您提取特定功能:

import { merge } from 'merge';
merge({x: 1}, {y: 2});
您不必更改模块结构


这里有更多的例子:

实际上,这段代码根本不起作用。即使它在编译时进行类型检查,但在运行时,
merge.merge
是未定义的。我认为问题在于,
merge
npm只是一个函数,而不是一个模块。我在第二次出现
declare
时得到一个编译错误:“'declare'修饰符不允许用于环境上下文中已经存在的代码。”删除它会删除编译错误,但是在导入文件中找不到符号
merge