2015-12-15 48 views
4

在Javascript中我有以下幾點:如何實現JS函數指針的打字稿

var chartOptions = { 
    chartType: settings.chartType, 
} 

chartOptions.func = function(chart) { 
    chartOptions.fullChart = chart; 
} 

這一切工作正常。

但是我想改變它到TypeScript和新的,我不確定如何做到這一點。請有人可以幫忙嗎?例如,'func'沒有符號,'fullChart'沒有符號,所以這怎麼能在Javascript中起作用?

+1

它不清楚你在這裏問什麼。你是否要求解釋代碼?打字稿與此有什麼關係?你是什​​麼意思,沒有'func'或'fullChart'的符號?你已經將它們聲明爲'chartOptions'對象的屬性。 –

+0

當我將上面的邏輯放入Typescript時,編譯器返回一個錯誤,它無法解析符號'func'和'fullChart'。 我需要做些什麼來糾正? – superman1971

回答

5

您可以修復你的代碼中添加屬性chartOptions

var chartOptions = { 
    chartType: settings.chartType, 
    func: null, 
    fullChart: null 
} 

chartOptions.func = function(chart) { 
    chartOptions.fullChart = chart; 
} 

那你的代碼轉換爲一類?它更是TypeScript-y :)

class ChartOptions { 
    public chartType; 
    public fullChart; 

    public func(chart: any) { 
     this.fullChart = chart 
    } 
}  

let chart = {}; 
let chartOptions = new ChartOptions(); 
chartOptions.func(chart); 
+0

「構造函數(public chartType:any){}」呢?或者任何特定的類型,而不是任何ctor參數? – TSV

+2

@TSV:當我嘗試向初學者回答問題時,我不使用這些高級功能,例如「...(public chartType ...)」。它只會導致IMO更多的混淆。不知道更多關於OP的代碼,這只是猜測.. –

0

考慮在設置它們之前使用界面來定義您的選項。要鏡像你的特定代碼片段,你可以在這裏使用類型斷言。

interface ChartOptions { 
    chartType: string; 
    func: (chart: any) => void; 
    fullChart: any; 
} 

var chartOptions = { 
    chartType: settings.chartType 
} as ChartOptions 

chartOptions.func = function(chart) { 
    chartOptions.fullChart = chart; 
} 

這要看最終目標,但如果你可以設置選項與您開始將不需要類型斷言(儘可能避免使用反正)。

interface ChartOptions { 
    chartType: string; 
    func: (chart: any) => void; 
    fullChart?: any; 
} 

var chartOptions: ChartOptions = { 
    chartType: settings.chartType, 
    func (chart: any) { 
     this.fullChart = chart; 
    } 
} 

或者您可以使用與其他用戶建議的一類,它更像是你應該用什麼在這裏,但不是你的例子是使用。