2015-10-07 322 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']; 
相關問題