2015-10-07 323 views
3

我使用gulp-angular Yeoman生成器创建了一个新项目,其语言设置为TypeScript。然后运行Gulp构建过程,并在网页浏览器中打开该页面,所有这些页面都没有任何更大的问题。我只需将tsd.json中的ref: "master"替换为ref: "1.4.1"即可完成构建工作。基本上我执行了以下命令:Visual Studio代码声明它在* .d.ts文件中定义的类型“无法找到名称空间”

yo gulp-angular 
vim tsd.json 
gulp 
gulp serve 
code . 

之后我在Visual Studio Code中打开了项目。

现在,Visual Studio代码抱怨,例如它“无法找到命名空间'ng'”每个使用AngularJS数据类型的情况。它也抱怨MomentJS*.d.ts文件中定义的其他类型。

该项目的tsd.json看起来是这样的:

{ 
    "version": "v4", 
    "repo": "borisyankov/DefinitelyTyped", 
    "ref": "1.4.1", 
    "path": ".tmp/typings", 
    "bundle": ".tmp/typings/tsd.d.ts" 
} 

.tmp/typings文件夹包含以下文件:

angular-ui-router/angular-ui-router.d.ts 
angularjs/angular-animate.d.ts 
angularjs/angular-cookies.d.ts 
angularjs/angular-mocks.d.ts 
angularjs/angular-resource.d.ts 
angularjs/angular-sanitize.d.ts 
angularjs/angular.d.ts 
jquery/jquery.d.ts 
moment/moment-node.d.ts 
moment/moment.d.ts 
toastr/toastr.d.ts 
tsd.d.ts 

为了给一个源文件的例子,其中Visual Studio代码抱怨,这里是navbar.directive.ts文件:

module editorTs { 
    'use strict'; 

    /** @ngInject */ 
    export function acmeNavbar(): ng.IDirective { 

    return { 
     restrict: 'E', 
     scope: { 
     creationDate: '=' 
     }, 
     templateUrl: 'app/components/navbar/navbar.html', 
     controller: NavbarController, 
     controllerAs: 'vm', 
     bindToController: true 
    }; 

    } 

    /** @ngInject */ 
    class NavbarController { 
    public relativeDate: string; 

    constructor(moment: moment.MomentStatic) { 
     this.relativeDate = moment(1444135396045).fromNow(); 
    } 
    } 
} 

在这个文件中的Visual Studio代码被抱怨ng.IDirective类型,它“找不到命名空间‘NG’”,它是抱怨moment.MomentStatic类型,它“找不到命名空间‘的时刻’”

编辑:

通过加入以下的navbar.directive.ts上明确地引用类型定义文件中删除的问题:

/// <reference path="../../../../.tmp/typings/angularjs/angular.d.ts"/> 
/// <reference path="../../../../.tmp/typings/moment/moment.d.ts"/> 

但这些文件在.tmp/tsd.d.ts已经提及,其中包含以下:

/// <reference path="angular-ui-router/angular-ui-router.d.ts" /> 
/// <reference path="angularjs/angular-animate.d.ts" /> 
/// <reference path="angularjs/angular-cookies.d.ts" /> 
/// <reference path="angularjs/angular-mocks.d.ts" /> 
/// <reference path="angularjs/angular-resource.d.ts" /> 
/// <reference path="angularjs/angular-sanitize.d.ts" /> 
/// <reference path="angularjs/angular.d.ts" /> 
/// <reference path="jquery/jquery.d.ts" /> 
/// <reference path="moment/moment-node.d.ts" /> 
/// <reference path="moment/moment.d.ts" /> 
/// <reference path="toastr/toastr.d.ts" /> 

所以应该不存在需要明确引用文件?

回答

1

找不到命名空间 'NG'”

确保项目中包含declare module ng没有提及同为时刻

更新

基于问题编辑:。

明确引用类型定义文件通过添加t他跟随navbar.directive的顶部。TS删除问题

请使用tsconfig.jsonhttps://basarat.gitbooks.io/typescript/content/docs/project/compilation-context.html

+0

运行'grep的-ri “申报模块NG” .'只显示一行'./bower_components/angular-ui-router/api/angular-ui-router.d.ts:declare模块ng.ui {'。 – zabbarob

+0

更改为'声明模块angular.ui' – basarat

+0

试过了,但这没有帮助。我假设不知何故Visual Studio Code必须被告知它可以在哪里找到类型。由于'gulp build'工作正常,在构建过程中似乎可以正确包含类型。 – zabbarob

0

我有同样的问题;它似乎打字剥离了引用“ng”导入的原始定义文件。

添加这回你原来的角/ index.d.ts文件:

// Collapse angular into ng import ng = angular;

或者更好的是,将其放置在一个ng.d.ts文件,所以它不是由分型再次改写。

1

tsconfig.json添加到我的VS Code项目的根目录是为我解决了问题。此外,必须重新启动VS代码。以下是我把那个文件中:

{ 
    "compilerOptions": { 
     "target": "es5", 
     "module": "commonjs", 
     "sourceMap": true 
    } 
} 

有关tsconfig.json文件的详细信息,请访问:

https://code.visualstudio.com/docs/languages/typescript

0

我发现在代码一个僻静的位置以下。可能放在那里以避免类型错误。看起来像vscode遇到了这种情况,并将全局“角度”变量重新定义为“任何”类型。

var angular = window['angular']; 
相关问题