Я намагаюся вивчити 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 file 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'."
Якщо я перейду до файлу, наданого типізацією, і додаю внизу файлу:
declare module "moment" { export = moment; }
Я можу зникнути другу помилку, але мені все ще потрібен оператор require, щоб отримати момент для роботи у моєму main.ts
файлі, і я все ще отримую першу помилку збірки.
Чи потрібно мені створювати власний .d.ts
файл на певний момент, чи мені просто не вистачає якоїсь частини налаштування?
import moment, { Moment } from 'moment';
дозволяє це зробитиconst x = moment();
іconst x: Moment = moment();