Typescript - 将函数添加到已定义的类型

时间:2014-01-23 20:12:06

标签: typescript

我正在翻译我的一些代码,并且我注意到了键入强制执行的特殊行为。我不确定它是“特殊的”,它可能是很好的预期,但我很好奇如何绕过它。

对于此示例,我使用的是Kendo UI的{​​{1}}窗口小部件,但几乎任何类型的库中的任何“类型”都足以证明它。

kendoWindow

现在在正常的Javascript下,这不会给我带来任何麻烦。但是export function UserWindow(options) { var settings = $.extend({ // default settings }, options); var $WINDOW = <kendo.ui.Window> {}; $WINDOW = $("<div id='kendo-editor-window' />") .kendoWindow(settings) // this is where we have now declared the type, basically .data("kendoWindow"); // here, I want to add my own little method to kendoWindow for the purpose of how // I intend to use it! $WINDOW.databind = function(e) { // this is where we run into trouble! // some code goes here } return $WINDOW; } 不是.databind(e)的定义函数,因此它实际上是在跟我这样添加它。

我已经能够通过不将变量声明为kendoWindow的类型来绕过它,但我想发现如何适当地处理这种情况,换句话说,正确地扩展类型以便我如果可能的话,得到intellisense和整个类型的安全事件。

1 个答案:

答案 0 :(得分:1)

基本类型检查应该(并且会)阻止您分配给不存在的变量(在您的情况下为databind)。因此,您需要在分配之前告诉typescript这样的函数是否存在。由于接口在TypeScript中是开放式的,因此很容易完成,因此添加以下代码:

module kendo.ui{
    export interface Window{
        databind: Function;
    }
}