打字稿联盟类型

时间:2015-11-16 11:26:46

标签: typescript

我正在从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'。

我不确定我的误解在哪里。我做错了什么?

1 个答案:

答案 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(再次注意外壳),它只在编译时可用。