我正在从Javascript迁移到Typescript,我正在尝试创建一个类方法,它可以接受JQuery对象或它们的数组。我试图使用联合类型,但似乎无法使用JQuery参数进行匹配:
setToGrey($items: JQuery[]|JQuery) {
if ($items instanceof Array) {
for (var i = 0; i < $items.length; i++) {
var $item = $items[i];
this.resetIcon($item);
$item.addClass(CSSClasses.TEXT_MUTED).find("span." + CSSClasses.GLYPHICON).addClass(CSSClasses.ICON_QUESTION_CICLE);
}
} else if ($items instanceof JQuery) {
this.resetIcon($items);
$items.addClass(CSSClasses.TEXT_MUTED).find("span." + CSSClasses.GLYPHICON).addClass(CSSClasses.ICON_QUESTION_CICLE);
}
}
我无法得到这条线:
} else if ($items instanceof JQuery) {
工作,错误出现,因为找不到名字'JQuery'。
我不确定我的误解在哪里。我做错了什么?
答案 0 :(得分:1)
您只需使用Array.isArray()
即可if (Array.isArray($items)) {
// ...
} else {
// ...
}
请注意以下签名中的类型
setToGrey($items: JQuery[]|JQuery) {
仅在编译时可用。而instanceof
来自
if ($items instanceof JQuery) {
是运行时检查,其中jQuery版本的内容(例如https://code.jquery.com/jquery-2.1.4.js)适用(即jQuery
- 注意外壳)。
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/jquery/jquery.d.ts#L1154定义文件定义了接口JQuery
(再次注意外壳),它只在编译时可用。