javascript - typescript 编译器 : @types/d3-tip - Cannot invoke an expression whose type lacks a call signature

标签 javascript d3.js typescript typescript-typings

我试图理解这个错误,阅读了所有带有类似错误消息的问题,但找不到任何帮助。

我对 TypeScript 还很陌生,但已经到了。我正在尝试包含与 d3 一起使用的 d3-tip 模块。我安装了@types/d3 和@types/d3-tip。现在我的代码看起来像这样

import * as d3 from 'd3';
import * as d3Tip from 'd3-tip';
console.log(d3Tip) // => print the function signature from d3-tip module
console.log(d3Tip()) 
// => results in error 'Cannot invoke an expression whose type lacks a call signature'
d3.tip = d3Tip 
// => results in error 'Property 'tip' does not exist on type 'typeof "<my-project-path>/node_modules/@types/d3/index"''

我认为我有两个问题:首先,我无法调用 d3-tip 方法,我真的不明白为什么如果有人能向我解释那会很棒。
其次,我无法将 d3Tip 函数附加为 d3 对象的新属性(这是我过去对 ES6 所做的,效果很好),然后使用 d3.tip() 创建提示。

我知道我可以找到其他解决方案,比如自己设计尖端(可能花费的时间更少 ^^),但我更愿意了解如何解决这个问题。

有什么想法吗?

最佳答案

好问题。最初我使用 npm install @types/d3-tip 安装。然后我需要将 ./node_modules/@types/d3-tip/index.d.ts 复制到 ./d3-tip.d.ts。现在以下代码有效:

import * as d3 from "d3";
import "./d3-tip";

d3.tip().hide();
let arc = d3.arc();

因此 d3-tip.d.ts 中的声明根据需要合并到 d3 命名空间中。为什么不复制它就不起作用我不知道。有帮助吗?

关于javascript - typescript 编译器 : @types/d3-tip - Cannot invoke an expression whose type lacks a call signature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40909217/

相关文章:

javascript - 等待 javascript 函数返回

javascript - ApiRTC token 认证

javascript - 有没有像 "correct"这样的东西用 React hooks 和 Typescript 定义状态?

typescript - 可索引类型中索引器名称的意义是什么?

抛出 "Property ' x' 的 Angular 属性装饰器没有初始化器...“最新 VSCode 中的错误

javascript - 为什么 window.opener 在此特定版本的 Windows/IE 中未定义?

c# onclick 和 onclientclick 同时

javascript - 为什么这段代码可以计算列表中的一个项目而不是其他项目?

javascript - 清除 D3.js Canvas

javascript - D3 : Why is d3. 格式 (".2s") 将 -0.5 格式化为 -500m?