我正在翻译我的一些代码,并且我注意到了键入强制执行的特殊行为。我不确定它是“特殊的”,它可能是很好的预期,但我很好奇如何绕过它。
对于此示例,我使用的是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和整个类型的安全事件。
答案 0 :(得分:1)
基本类型检查应该(并且会)阻止您分配给不存在的变量(在您的情况下为databind
)。因此,您需要在分配之前告诉typescript这样的函数是否存在。由于接口在TypeScript中是开放式的,因此很容易完成,因此添加以下代码:
module kendo.ui{
export interface Window{
databind: Function;
}
}