TypeScript编译器:@ types / d3-tip - 无法调用类型缺少调用签名的表达式

时间:2016-12-01 11:13:45

标签: 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()创建一个提示。

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好问题。最初我使用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命名空间中。为什么没有复制它不起作用我不知道。有什么帮助吗?