TypeScript:参数类型函数不能分配给参数类型函数

时间:2013-10-24 14:21:49

标签: javascript d3.js typescript

我无法理解Webstorm IDE中的以下TypeScript错误消息(对TypeScript来说很新,很抱歉......)

我正在使用DefinitelyTyped存储库中的d3.d.ts来实现d3js的图形,其中d3.svg.arc()方法的接口定义如下:

export interface Arc { 
...
outerRadius: {
            (): (data: any, index?: number) => number;
            (radius: number): Arc;
            (radius: () => number): Arc;
            (radius: (data: any) => number): Arc;
            (radius: (data: any, index: number) => number): Arc;
        };
 ...
 }

以下列方式实施弧...

svg.selectAll(".arc")    
            .attr("d", function (d) {
                       return d3.svg.arc().outerRadius(
                              function (d) {
                                 return d - 9;
                              })
                        ...

我收到错误:“参数类型函数不能分配给参数类型函数”

所以

 function (d) {return d - 9;})

似乎对该接口无效,即使它似乎是

类型
 (): (data: any, index?: number) => number;

我想我会监督一些显而易见的事情......我现在卡住了

由于

1 个答案:

答案 0 :(得分:4)

我遇到类似转换字符串的问题,并通过添加明确的类型转换来修复它:

$.replace(/text/g, <string>$.now());

请注意参数前的<string>

试着转发并告诉它如何发展。

在你的情况下,它将是:

svg.selectAll(".arc")    
        .attr("d", function (d) {
                   return d3.svg.arc().outerRadius(
                          <Function>function (d) {
                             return d - 9;
                          })
                    ...

或者也许:

svg.selectAll(".arc")    
        .attr("d", function (d) {
                   return d3.svg.arc().outerRadius(
                          <function>function (d) {
                             return d - 9;
                          })
                    ...

因为错误在于功能功能之间的区别。