我使用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" />
所以應該不存在需要明確引用文件?
運行'grep的-ri 「申報模塊NG」 .'只顯示一行'./bower_components/angular-ui-router/api/angular-ui-router.d.ts:declare模塊ng.ui {'。 – zabbarob
更改爲'聲明模塊angular.ui' – basarat
試過了,但這沒有幫助。我假設不知何故Visual Studio Code必須被告知它可以在哪裏找到類型。由於'gulp build'工作正常,在構建過程中似乎可以正確包含類型。 – zabbarob