我在当前项目中使用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
答案 0 :(得分:4)
由于要从模块导入R
名称空间,因此必须扩展原始模块。如果声明自己的R
命名空间,充其量只能看到您的命名空间或导入的命名空间,而不是合并。经过一番尝试和错误之后,以下内容对我有用:
declare module "dummy" {
module "ramda" {
interface Static {
innerJoin(): any;
}
}
}
需要外部模块声明以使内部模块声明成为“增强”,而不是遮盖原始模块,如this thread中所述。不幸的是,该技巧没有正确记录AFAIK。