Ich versuche Typoskript zu lernen. Obwohl ich es nicht für relevant halte, verwende ich VSCode für diese Demo.
Ich habe eine package.json
, die diese Stücke enthält:
{
"devDependencies": {
"gulp": "^3.9.1",
"jspm": "^0.16.33",
"typescript": "^1.8.10"
},
"jspm": {
"moment": "npm:moment@^2.12.0"
}
}
Dann habe ich eine Typescript-Klasse main.js
wie diese:
import moment from 'moment';
export class Main {
}
Mein gulpfile.js
sieht so aus:
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'));
});
Wenn ich gulp build starte, erhalte ich die folgende Meldung: "../main.ts(1,25): Cannot file module 'moment'."
Wenn ich verwende, import moment = require('moment');
funktioniert jspm und bringt das Modul ein, wenn ich die Anwendung ausführe, aber ich erhalte immer noch den Build-Fehler. Ich habe auch versucht:
npm install typings -g
typings install moment --ambient --save
Anstatt das Problem zu verbessern, wurde es schlimmer. Jetzt erhalte ich den obigen Fehler beim Erstellen sowie den folgenden:"../typings/browser/ambient/moment/index.d.ts(9,21): Cannot find namespace 'moment'."
Wenn ich zu der durch Eingaben bereitgestellten Datei gehe und am Ende der Datei hinzufüge:
declare module "moment" { export = moment; }
Ich kann den zweiten Fehler beheben lassen, aber ich benötige immer noch die require-Anweisung, damit der Moment in meiner main.ts
Datei funktioniert, und erhalte immer noch den ersten Build-Fehler.
Muss ich .d.ts
für einen Moment meine eigene Datei erstellen oder fehlt mir nur ein Setup-Teil?
import moment, { Moment } from 'moment';
const x = moment();
const x: Moment = moment();