由于打字稿的强类型特性,在比较jQuery .data()调用的结果和一些简单类型(如一些字符串)时似乎存在问题。
例如:
var dataValue = $("#myDiv").data("div-index");
if(dataValue === 0)
{
alert("first item");
}
以上将产生Operator '===' cannot be applied to types 'JQuery' and 'number'.
TypeScript将.data()
的结果视为JQuery类型,因此无法按照预期的复杂类型进行评估。
到目前为止,唯一的解决方法是在.toString()
调用结束时调用.data()
,但这意味着修改所有当前.data()
调用及其比较。这也使得>
之类的数字比较变得不可能,因为我们无法在字符串和数字之间进行比较。
此问题似乎仅在更新到TypeScript 1.6后发生。
答案 0 :(得分:3)
看起来像个bug。我刚刚查看了jQuery.d.ts文件并找到了您的返回类型,但是另一种方法是重载。
尝试在方法调用上方添加CKEDITOR.on( 'dialogDefinition', function( evt ) {
var dialogName = evt.data.name;
var dialogDefinition = evt.data.definition;
var editor = evt.editor;
if ( dialogName == 'link' ) {
var defaultOnOk = dialogDefinition.onOk;
dialogDefinition.onOk = function() {
defaultOnOk.apply( this, arguments );
var sel = editor.getSelection(),
range = sel.getRanges()[ 0 ],
path = range.startPath();
range.moveToPosition( path.contains( 'a' ), CKEDITOR.POSITION_AFTER_END );
range.select();
}
}
});
:
<any>
这个案子对你有用
您也可以在官方TypeScript问题主题和DefinitelyTyped问题主题
上报告此问题答案 1 :(得分:2)
升级到jquery.d.ts
的最新版本。我也注意到了这一点。有一个错误可以使用data(obj: { [key: string]: any; }): JQuery;
代替.data(key: string): any
。它已在this commit中修复。
升级后,data(key: string)
的返回类型为any
,您可以通过使用类型断言告诉编译器您知道它将是一个数字:
var dataValue = $("#myDiv").data("div-index") as number;
if (dataValue === 0)
{
alert("first item");
}
答案 2 :(得分:1)
实际上,根据jQuery.d.ts,对$("#myDiv").data("div-index")
的调用是返回类型<any>
。
可能是,你在元素中存储的值实际上是一个jQuery对象吗?