我正努力学习 TypeScript。虽然我不认为这很重要,但我在这个演示中使用的是 VSCode。
我有一个 package.json
文件,其中包含以下内容:
{
"devDependencies": {
"gulp": "^3.9.1",
"jspm": "^0.16.33",
"typescript": "^1.8.10"
},
"jspm": {
"moment": "npm:moment@^2.12.0"
}
}
那么我有一个TypeScript类 main.js
,代码如下:
import moment from 'moment';
export class Main {
}
我的gulpfile.js
看起来像这样:
var gulp = require('gulp');
var typescript = require('gulp-tsb');
var compilerOptions = {
"rootDir": "src/",
"sourceMap": true,
"target": "es5",
"module": "amd",
"declaration": false,
"noImplicitAny": false,
"noResolve": true,
"removeComments": true,
"noLib": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true
};
var typescriptCompiler = typescript.create(compilerOptions);
gulp.task('build', function() {
return gulp.src('/src')
.pipe(typescriptCompiler())
.pipe(gulp.dest('/dest'));
});
当我运行 gulp build 时,出现以下信息:"../main.ts(1,25): Cannot find module 'moment'."
如果我使用import moment = require('moment');
,那么 jspm 就会正常工作,并在运行应用程序时引入该模块,但我仍然收到构建错误。
我还尝试了:
npm install typings -g
typings install moment --ambient --save
然而,问题没有得到改善,反而变得更糟了。现在,我在构建时遇到了上述错误以及以下错误:"../typings/browser/ambient/moment/index.d.ts(9,21): Cannot find namespace 'moment'."
如果我进入typings提供的文件,在文件底部添加以下内容:
declare module "moment" { export = moment; }
我可以处理第二个错误,但是我仍然需要 require
语句才能让 moment 在我的 main.ts
文件中工作,并且仍然得到第一个编译错误。
我是否需要为 moment 创建自己的 .d.ts
文件,还是我只是缺少某些设置?
import moment, { Moment } from 'moment';
可以让你使用const x = moment();
和const x: Moment = moment();
。 - ryuu9187