2013-10-24 111 views
3

我不能讓周圍的Webstorm IDE以下打字稿錯誤消息,我的頭(很新的打字稿很抱歉...)打字稿:參數類型函數是不能分配給參數類型功能

我使用從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; 

我猜我負責的東西顯然還沒有......我堅持現在

感謝

+0

這個例子(剝離)適用於我http://www.typescriptlang.org/Playground/ – SLaks

+0

Playground和WebStorm不一定(可能不是)使用相同版本的TypeScript。嘗試顯式輸入傳入outerRadius的函數,看看會發生什麼。 '''outerRadius(function(d:any):number {return d - 9;});''' –

回答

3

我有一個字符串到數字轉換類似的問題,並通過添加一個明確的類型轉換來修復它:

$.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; 
          }) 
        ... 

因爲錯誤在於功能功能之間的差異。

+1

非常感謝迪斯尼 - 當我添加函數腳本不再編譯時,我得到一個「Type」()= >數字'需要呼叫簽名,但類型'功能'缺少一個。「 – dorjeduck

相關問題