angularjs - TypeScript-kompilatoren utelater importert angular-translate-modul
Jeg holder på å konvertere et Angular 1.5-prosjekt til TypeScript og støtte på et problem med import av angularTranslate.
Jeg prøver å importere både angular og angular-translate slik:
import * as angular from "angular";
import * as angularTranslate from "angular-translate";
console.log(angular, angularTranslate);
Jeg bruker typings installert fra DefinitelyTyped/angular-translate.d.ts.
Når jeg kompilerer med TypeScript 1.8 (module: "commonjs") genererer det denne JavaScript-en:
"use strict";
var angular = require("angular");
console.log(angular, angularTranslate);
Som du kan se har den fjernet angularTranslate-importen selv om den er referert til, og den tilsvarende brukte angular-importen beholdes. Dette resulterer i en kjøretidsfeil ReferenceError: angularTranslate is not defined. Dette fungerer fint med Babel. Hvordan bør jeg importere angularTranslate?
Rediger:
Dette avgir heller ingenting:
import angularTranslate = require("angular-translate");
Men dette gir den forventede utgangen:
let angularTranslate = require("angular-translate");
Er det noe galt med angular-translate-modulen som gjør det umulig å bruke den med import i TypeScript?
Svar #1
Problemet er at «angular-translate»-modulen eksporterer et navnerom. Som en midlertidig løsning kan du referere til gammel versjon av angular-translate.d.ts eller lage en egen kopi og fikse den manuelt.
Svar #2
angular 1.5 støtter ikke modulstrukturen til JS eller UMD (det har sitt eget modulsystem). Så hvis du importerer noe fra "angular", importerer du bare typer fra en definitly typed-fil fra ambient moduldeklarasjon, og TypeScript-transpileren klarer å gjenkjenne at det ikke er nødvendig å generere CommonJS importdefinisjon til det resulterende JS (bare deklarasjon importeres). Men i tilfelle du direkte definerer import med CommonJS required-syntaks (eller med ES6 import "module"), oppretter du en side-effekt-import som kjører angular-scriptet når modul-lasteren eller bundleren laster den nødvendige modulen.