2013-02-15 113 views
7

請參考討論Highcharts text labels for y-axis的方式設置y軸標籤。Highcharts打字稿,y軸標籤

我在打字稿定義中使用https://github.com/borisyankov/DefinitelyTyped/blob/master/highcharts/highcharts.d.ts,但我無法找到一個方法來定義y軸格式。

任何人之前沒有試過?

- 更新 -

我的原著JavaScript代碼是

var yearChartOptions = { 
    yAxis: { 
     plotLines: [{ 
      label: { 
       formatter: function() { 
        return '$' + Highcharts.numberFormat(this.value/1000, 0) +'k '; 
       } 
      }, 
     }] 
    }, 
}; 

// Create the chart 
var yearChart = new Highcharts.Chart(yearChartOptions); 

在代碼我有一個THIS.VALUE其是每個杆(I使用條形圖)值。在TypeScript中(我還沒有改變,以刪除數組呢)。

var yearChartOptions: HighchartsOptions = {}; 
    yearChartOptions.chart = {}; 
    yearChartOptions.yAxis = []; 
    yearChartOptions.yAxis[0] = {}; 
    yearChartOptions.yAxis[0].plotLines = {}; 
    yearChartOptions.yAxis[0].plotLines.label = {}; 
    yearChartOptions.yAxis[0].plotLines.label.style.formatter(() => "$" + Highcharts.numberFormat(this.value/1000, 0) + "k "); 

    // Create the chart 
    var yearChart = new Highcharts.Chart(yearChartOptions); 

輸出是

/* 
Compile Error. 
See error list for details 
D:/MyProject/Scripts/test.ts(36,56): The property 'formatter' does not exist on value of type 'HighchartsCSSObject' 
D:/MyProject/Scripts/test.ts(36,107): The property 'value' does not exist on value of type 'Dashboard' 
*/ 

,它不會編譯。

+0

可能重複http://stackoverflow.com/questions/4987457/highcharts-text-labels-for-y-軸) – 2013-02-15 06:48:46

+1

我不認爲這是重複的。海報正在嘗試使用該答案中的代碼,但是TypeScript編譯器正在拒絕它。 – Fenton 2013-02-15 10:01:11

+0

@hardywang做了更新的定義解決你的問題? – Fenton 2013-02-18 15:10:49

回答

2

更新 - 現在的Definitely Typed Highcharts definition有我修復,所以你可以下載最新版本,並希望這將解決您的問題。

爲Highcharts類型定義表明你需要傳遞的選項,以y軸AMD陣列。這在TypeScript中編譯。

var chart = new Highcharts.Chart({ 
    yAxis: [{ 
     labels: { 
      formatter: function(): string { 
       return 'My Label'; 
      } 
     } 
    }] 
}); 

但是,我不知道這個匹配the documentation, which suggests you pass the yAxis options as an object,還不如許多對象的數組。從這個角度來看,這也是有道理的,你有一個單一的yAxis。

要實現什麼,我認爲這是有效的版本(即不是數組):

/// <reference path="highchart.d.ts" /> 

var yearChartOptions: HighchartsOptions = { 
    yAxis: { 
     plotLines: { 
      label: { 
       formatter: function(): string { 
        return '$' + Highcharts.numberFormat(this.value/1000, 0) + 'k '; 
       } 
      }, 
     } 
    } 
}; 


// Create the chart 
var yearChart = new Highcharts.Chart(yearChartOptions); 

您可以調整highchart.d.ts這裏提交...

interface HighchartsOptions { 
    chart?: HighchartsChartOptions; 
    // others... 
    yAxis?: HighchartsAxisOptions; // <-- remove the [] from this line 
} 

我已提交一個確定鍵入的拉請求來解決這個問題。

工作的完整示例基於您的代碼:

[爲y軸Highcharts文本標籤(的
+0

仍然有編譯錯誤,因爲'yearChartOptions.yAxis.plotLines.label.style.formatter(()=> 「$」 + Highcharts.numberFormat(THIS.VALUE/1000,0)+ 「K」);'格式化器是不找不到「this」關鍵字。樣品http://stackoverflow.com/questions/4987457/highcharts-text-labels-for-y-axis和文件http://api.highcharts.com/highcharts#yAxis.labels.formatter – hardywang 2013-02-20 00:47:19

+0

我已經更新下的示例'實現我認爲是有效的版本'的評論。 – Fenton 2013-02-20 09:18:41

+0

謝謝,我試過你的語法來實例化對象內的對象,它的工作原理。我不知道我的方式有什麼問題,實例化對象,然後設置對象的屬性,但它不起作用。 – hardywang 2013-02-20 23:40:00