2014-01-22 56 views
2

我現在在我的網站上使用Typescript,並且在特定的jQuery事件中遇到困難。TypeScript拒絕允許jQuery'on'佈線

爲了舉例,我將代碼縮短到相關部分;我有這樣的設置...

var elements = { 
    wizard: {} 
}; 

elements.wizard.wizard({ // initialization behavior // }); 
elements.wizard.on('step-shown', function(e){ 
    // do some stuff here 
}); 

嚮導聲明是這樣的;

(function ($) { 
    $.fn.wizard = function(options) { 
     // behavior of wizard plugin 
    } 
})(jQuery); 

然後,我有打字稿定義它...

interface JQuery { 
    Wizard(options); 
} 

我能夠真正連線精靈本身,但是這不是我的問題。問題是on部分,它表示property 'on' does not exist on type '{}'。不過,我不知道如何處理這個問題。任何人都可以協助

回答

1

你不是聲明類型爲JQuery.Wizard的嚮導變量。

在代碼

var elements = { 
    wizard: {} 
}; 

elements.wizard.wizard({ // initialization behavior // }); 
elements.wizard.on('step-shown', function(e){ 
    // do some stuff here 
}); 

嚮導被實例化作爲一個空對象{},因此它沒有任何方法或變量。這就是你收到錯誤的原因。

而不是鍵入它作爲any或自定義類型,只需鍵入它到JQuery.Wizard類型。

var elements = { 
    wizard: <JQuery.Wizard>{} 
}; 

elements.wizard.wizard({ // initialization behavior // }); 
elements.wizard.on('step-shown', function(e){ 
    // do some stuff here 
}); 

我表現出對this example行爲。

+0

試圖做到這一點給了我一個奇怪的錯誤;它告訴我,在我嘗試的任何事情上,它都希望','而不是'.'。 – Ciel

+0

也就是在實際的''部分。如果我嘗試更專業定義的類型,就像這樣做,就像在劍道套件中的任何東西一樣。 – Ciel

+0

你正在運行什麼版本的TypeScript? – thomaux

0

這是因爲類型推理。當你說:

var elements = { 
    wizard: {} 
}; 

打字稿推斷元素具有成員嚮導,嚮導有沒有進一步的成員(因爲{}

一種選擇是使用any

var elements = { 
    wizard: <any>{} 
}; 

或您的定製類型:

var elements = { 
    wizard: <whatyouactuallythinkthisshouldbe>{} 
};