【问题标题】:Subsequent variable declarations must have the same type. Variable '$' must be of type 'JQueryStatic', but here has type 'cssSelectorHelper'后续的变量声明必须具有相同的类型。变量“$”必须是“JQueryStatic”类型,但这里有“cssSelectorHelper”类型
【发布时间】:2016-04-11 00:27:31
【问题描述】:

我有一个非常简单的文件:

/// <reference path="../typings/browser/ambient/jquery/jquery" />
import {Component} from "angular2/core";

@Component({})
export class AppComponent{

    constructor(){
        $.isEmptyObject({});
    }

}

我安装了 jQuery 类型,所以 typescript 不会抱怨不识别 $。但现在事情是抱怨问题中的问题:

Error:(1679, 13) TS2403: Subsequent variable declarations must have the same type.  Variable '$' must be of type 'JQueryStatic', but here has type 'cssSelectorHelper'.

出现此问题是因为 angular-protractor 也声明了 $,但声明为 cssSelectorHelper 而不是 JQueryStatic 对象。

事情是......我根本没有使用量角器!!!,为什么当我从 angular2/code 导入一些东西时它会被添加?在 Angular 的人解决这个问题之前,是否有一个体面的解决方法,如果他们有的话。

注意:注释掉量角器文件中的定义不是一个体面的解决方法,我正在寻找一些永久的东西,当其他人抓取项目并运行全新安装或更新 angular 库时不会消失.

【问题讨论】:

  • 您的问题实际上与stackoverflow.com/questions/34546446/… 重复,希望Angular 团队能尽快解决此问题。
  • 它们是相关的,而不是重复的。那个似乎更通用,并且要求将整个 Angular 2 作为一个 distinctlyTyped 库。我只是想为这个特定的 jquery 冲突解决它,因为他们首先在核心模块中调用量角器是愚蠢的。
  • 所以你的问题是github.com/angular/angular/issues/4725,对吧?
  • 正确,我相信这是他们为同一问题留下的一般问题:github.com/angular/angular/issues/5459 并且对于我在主仓库中看到的内容,他们可能已经修复了它,但他们还没有发布另一个构建到 npm。我正在寻找只申请一次的解决方法,直到他们在 npm 中发布新版本(如果他们确实修复了它)。
  • 我在这里看不到他们的任何修复:github.com/angular/angular/commits/master。我相信它会像他们在这里承诺的那样在全球范围内得到修复:github.com/angular/angular/issues/5807#issuecomment-169041808。但我不确定,这只是我的解释。 :)

标签: typescript angular


【解决方案1】:

作为一种解决方法,注释掉 JQueryStatic 并替换为 angular-protractor.d.ts 底部的 cssSelectorHelper

declare var browser: protractor.IBrowser;
declare var by: protractor.IProtractorLocatorStrategy;
declare var By: protractor.IProtractorLocatorStrategy;
declare var element: protractor.Element;
// declare var $: JQueryStatic;
declare var $: cssSelectorHelper;
declare var $$: cssArraySelectorHelper;

【讨论】:

  • 您倒退了,您必须将 cssSelectorHelper 替换为 JQueryStatic,或者简单地评论我正在执行 atm 的行。它有效,但每个下载 repo 的人都必须这样做。我正在寻找一个自动化的解决方案,比如用节点排除量角器模块,或者从另一个来源下载整个包,因为似乎这个问题已经在主仓库中解决了,npm 还没有新的构建。另一种临时解决方法如下:$.isEmptyObject({});
【解决方案2】:

d.ts文件中替换

declare module "jquery" {
    export = $;
}
declare var jQuery: JQueryStatic;
declare var $: JQueryStatic;

declare module "jquery" {
    export = jQuery;
}
declare var jQuery: JQueryStatic;

【讨论】:

    猜你喜欢
    • 2020-09-11
    • 2017-10-23
    • 2017-11-15
    • 2018-04-18
    • 1970-01-01
    • 2017-07-14
    • 2016-11-07
    • 2019-09-04
    • 2017-08-17
    相关资源
    最近更新 更多