use*_*686 3 typescript ramda.js
我在当前项目中使用 TypeScript 和 Ramdajs。而且我刚刚意识到遗漏了一些打字,即没有打字innerJoin功能(@types/ramda 版本是 0.25.36,我现在的最新版本)。我尝试在项目中的单独文件中添加自定义定义:
declare namespace R {
interface Static {
innerJoin(): any;
}
}
Run Code Online (Sandbox Code Playgroud)
乃至:
declare let R: R.Static;
declare namespace R {
interface Static {
innerJoin(): any; /* here should be a specific signature */
}
}
export = R;
export as namespace R;
Run Code Online (Sandbox Code Playgroud)
但没有成功 - 打字稿标记R.innerJoin(/*...*/)为未知:
“静态”类型上不存在属性“innerJoin”
有人知道如何正确实施吗?我找到了一个解决方法:const R_innerJoin = (R as any).innerJoin
但我怀疑应该有使用 '.d.ts' 的更优雅的解决方案......
如果这很重要,PS ramda 版本是 0.25.0。
更新
我正在以这种方式使用 Ramda:
import * as R from 'ramda';
const myFn = (a, b) => R.innerJoin(// etc
Run Code Online (Sandbox Code Playgroud)
由于您是R从模块导入命名空间,因此您必须扩充原始模块。如果您声明自己的R命名空间,最多只能看到您的命名空间或导入的命名空间,而不是合并。经过一些试验和错误后,以下内容对我有用:
declare module "dummy" {
module "ramda" {
interface Static {
innerJoin(): any;
}
}
}
Run Code Online (Sandbox Code Playgroud)
需要外部模块声明来使内部模块声明成为“扩充”,而不是像本线程中提到的那样遮蔽原始模块。不幸的是,AFAIK 没有正确记录该技巧。
| 归档时间: |
|
| 查看次数: |
697 次 |
| 最近记录: |