J'essaie d'apprendre TypeScript. Bien que je ne pense pas que cela soit pertinent, j'utilise VSCode pour cette démo.
J'ai un package.json
qui contient ces pièces:
{
"devDependencies": {
"gulp": "^3.9.1",
"jspm": "^0.16.33",
"TypeScript": "^1.8.10"
},
"jspm": {
"moment": "npm:moment@^2.12.0"
}
}
Ensuite, j'ai une classe TypeScript main.js
comme ceci:
import moment from 'moment';
export class Main {
}
Mon gulpfile.js
ressemble à ceci:
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'));
});
Lorsque je lance gulp build, je reçois le message suivant: "../main.ts(1,25): Cannot file module 'moment'."
Si j'utilise import moment = require('moment');
, jspm fonctionnera et apportera le module lorsque je lance l'application, mais je reçois toujours l'erreur de construction. J'ai aussi essayé:
npm install typings -g
typings install moment --ambient --save
Au lieu d’améliorer le problème, il a empiré. Maintenant, j'obtiens l'erreur ci-dessus sur la construction ainsi que les suivantes: "../typings/browser/ambient/moment/index.d.ts(9,21): Cannot find namespace 'moment'."
Si je vais au fichier fourni par les saisies et ajoute au bas du fichier:
declare module "moment" { export = moment; }
Je peux obtenir la deuxième erreur, mais j'ai toujours besoin de l'instruction require pour avoir le moment de travailler dans mon fichier main.ts
et j'obtiens toujours la première erreur de génération.
Dois-je créer mon propre fichier .d.ts
pour l'instant ou puis-je manquer d'un élément de configuration?
Mettre à jour
Apparemment, moment fournit maintenant ses propres définitions de types (selon sivabudh au moins à partir de 2.14.1), vous n'avez donc pas besoin de typings
ou @types
.
import * as moment from 'moment'
devrait charger les définitions de type fournies avec le paquet npm.
Cela dit cependant, comme indiqué dans moment/pull/3319 # d'émission-commentaire-263752265 le moment où l'équipe semble avoir quelques problèmes pour maintenir ces définitions (ils cherchent toujours quelqu'un qui maintient leur).
Vous devez installer les typages moment
sans l'indicateur --ambient
.
Puis incluez-le en utilisant import * as moment from 'moment'
Vous devez importer moment () la fonction et Moment la classe séparément dans TS.
J'ai trouvé une note dans la documentation TypeScript ici .
/ * ~ Notez que les modules ES6 ne peuvent pas exporter directement des fonctions appelables. * ~ Ce fichier doit être importé en utilisant le style CommonJS: * ~ import x = require ('someLibrary');
Ainsi, le code pour importer le moment js dans TypeScript se présente comme suit:
import { Moment } from 'moment'
....
let moment = require('moment');
...
interface SomeTime {
aMoment: Moment,
}
...
fn() {
...
someTime.aMoment = moment(...);
...
}
via des saisies
Moment.js prend désormais en charge TypeScript dans v2.14.1.
Voir: https://github.com/moment/moment/pull/328
directement
Ce n'est peut-être pas la meilleure réponse, mais c'est la méthode de la force brute, et cela fonctionne pour moi.
moment.js
et de l’inclure dans votre projet.$ tree . ├── main.js ├── main.js.map ├── main.ts └── moment.js
`` `
import * as moment from 'moment';
class HelloWorld {
public hello(input:string):string {
if (input === '') {
return "Hello, World!";
}
else {
return "Hello, " + input + "!";
}
}
}
let h = new HelloWorld();
console.log(moment().format('YYYY-MM-DD HH:mm:ss'));
node
pour exécuter main.js
.Vous ne savez pas quand cela a changé, mais avec la dernière version de TypeScript, il vous suffit d'utiliser import moment from 'moment';
et tout le reste devrait fonctionner normalement.
On dirait que le moment récent a corrigé leur importation. À partir d’au moins 2.24.0
, vous souhaiterez utiliser import * as moment from 'moment';
1. moment d'installation
npm install moment --save
2. Testez ce code dans votre fichier TypeScript
import moment = require('moment');
console.log(moment().format('LLLL'));