Ramda和Typescript:添加缺少的类型

时间:2018-08-12 07:13:57

标签: typescript ramda.js

我在当前项目中使用TypeScript和Ramdajs。而且我刚刚意识到缺少某些类型的输入,即innerJoin函数没有类型(@ types / ramda版本是0.25.36,这是我现在访问的最新版本)。 我试图在项目内的单独文件中添加自定义定义:

declare namespace R {
    interface Static {
        innerJoin(): any;
    }
}

甚至:

declare let R: R.Static;

declare namespace R {
    interface Static {
        innerJoin(): any; /* here should be a specific signature */
    }
}

export = R;
export as namespace R;

但未成功-打字稿将R.innerJoin(/*...*/)标记为未知:

  

类型“静态”的属性“ innerJoin”不存在

有人知道如何正确实施它吗? 我找到了一种解决方法:const R_innerJoin = (R as any).innerJoin 但是我怀疑应该使用'.d.ts'...

P.S。如果这很重要,则ramda版本为0.25.0。

更新

我以这种方式使用Ramda:

import * as R from 'ramda';
const myFn = (a, b) => R.innerJoin(// etc

1 个答案:

答案 0 :(得分:4)

由于要从模块导入R名称空间,因此必须扩展原始模块。如果声明自己的R命名空间,充其量只能看到您的命名空间或导入的命名空间,而不是合并。经过一番尝试和错误之后,以下内容对我有用:

declare module "dummy" {
    module "ramda" {
        interface Static {
            innerJoin(): any;
        }
    }
}

需要外部模块声明以使内部模块声明成为“增强”,而不是遮盖原始模块,如this thread中所述。不幸的是,该技巧没有正确记录AFAIK。