2014-01-22 31 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>{} 
};