2016-01-06 53 views
8

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

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

@Component({}) 
export class AppComponent{ 

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

} 

我安装了jQuery的分型,从而打字稿不会抱怨不承认$。但现在的事情是在抱怨问题的问题:

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

此问题是因为角量角器声明$很好,但作为一个cssSelectorHelper而不是JQueryStatic对象。

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

注意:在量角器文件中注释掉定义并不是一个体面的解决方法,我正在寻找永久性的东西,当别人抓住项目并运行干净的安装或者当我们更新角度时不会消失图书馆。

+0

你的问题实际上是http://stackoverflow.com/questions/34546446/flattening-type script-typings-or-interfaces /希望Angular团队很快就会解决这个问题。 –

+0

它们是相关的,不是重复的。那个似乎更通用,并且要求将整个Angular 2作为DefinitelyTyped库。我只是想解决这个特定的jQuery冲突,因为他们首先在核心模块中调用量角器是愚蠢的。 – Langley

+0

所以你的问题是这个https://github.com/angular/angular/issues/4725,对吧? –

回答

0

作为变通,注释掉JQueryStatic和角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; 
+0

你知道了,你必须替换cssSelectorHelper替代JQueryStatic,或者简单地注释一下我在做atm的那一行。它有效,但每个下载回购的人都必须这样做。 我正在寻找一个自动化的解决方案,比如排除量角器模块和节点,或者从另一个源下载整个软件包,因为它似乎已经在master repo中解决了问题,目前还没有新的npm版本。 另一个临时解决方法如下: $ .isEmptyObject({}); – Langley

7
d.ts文件

替换

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

declare module "jquery" { 
    export = jQuery; 
} 
declare var jQuery: JQueryStatic; 
相关问题