Verwenden von Angular 1.x mit TypeScript 1.5 und SystemJS

8

Ich versuche Angular 1.x mit TypeScript 1.5.3 und SystemJS zu verwenden. Die index.html Seite ist auf System.import('bootstrapper') eingestellt, was den Anfang machen sollte.

bootstrapper.ts wird zu bootstrapper.js kompiliert und funktioniert gut, solange es nicht angular verwendet wird (d. h. nur console.log() funktioniert ok)

Nun möchte ich eckig importieren und verwenden, um es zu bootstrappen. Ich habe jspm install angular schon gemacht und auch einige typings für angular mit tsd installiert. Die Typisierungen werden oben in der Datei bootstrap.ts referenziert.

Leider funktioniert import angular from 'angular' nicht, ich bekomme Module "angular" has no default export . Meine Fragen sind:

  1. Warum kompiliert import angular from 'angular' nicht? Wenn ich in der Datei angular.d.ts nachschaue, sehe ich declare module 'angular'{ export = angular; } , was, wenn ich es richtig verstehe, ein Standard-Export aus dem Modulwinkel einer Variablen ist (oben in der Typisierungsdatei definiert) declare var angular: angular.IAngularStatic
  2. Ich habe bemerkt, dass import 'angular' kompiliert, und dann kann ich tatsächlich auf angular verweisen und z. angular.module(...) , aber ich glaube nicht, dass ich richtig verstehe, wie das funktioniert. Sollte nicht import 'angular' einen "bloßen Import" durchführen, d. H. Ein Modul nur wegen seiner Nebenwirkungen laufen lassen? Wenn das der Fall ist, bedeutet das, dass dieser Import tatsächlich angular im globalen Gültigkeitsbereich registriert?

Ich bin mir ziemlich sicher, dass ich nicht richtig verstehe, wie Module / Typdefinitionsdateien in Typescript funktionieren, danke im voraus für eine Erklärung.

    
adrian h. 01.09.2015, 16:45
quelle

2 Antworten

7

Zunächst ist meine bevorzugte Methode, AngularJS 1.5 mit TypeScript und SystemJS zu verwenden: index.html

%Vor%

app/main.ts

%Vor%

tsconfig.json

%Vor%

config.js (loader config, vereinfacht)

%Vor%

Hinweise:

  1. Wenn Sie JSPM 0.17 verwenden, geben Sie "plugin-typescript" , nicht "typescript" für den loader und den transpiler an oder führen Sie einfach $ jspm init aus und wählen Sie einen transpiler.
  2. Sie können angular als Standard importieren, aber es wird sich trotzdem im globalen Bereich registrieren.
  3. Der Grund für Syntaxfehler liegt in angular , und die angular.d.ts -Deklarationsdatei enthält eine CommonJS-Stil export = -Deklaration, um die Verwendung von Modulen und globalen Namespaces zu ermöglichen. SystemJS interpoliert dies zur maximalen Kompatibilität in einen Standard-Export zur Laufzeit.
  4. Der TypeScript-Compiler muss darauf aufmerksam gemacht werden. Dies kann durch Festlegen von "module": "system" und / oder durch Angabe von "allowSyntheticDefaultImports": true erfolgen. Ich habe beides getan, um der Deutlichkeit und der Deutlichkeit willen.
Aluan Haddad 30.05.2016 03:06
quelle
5
  

[...] wenn ich das richtig verstehe, ist ein Standard-Export vom Modul   Winkel einer Variablen

Nein, das passiert nicht. Angular exportiert den gesamten Namespace als Export, wenn das sinnvoll ist.

import angular from 'angular' versucht, default aus dem Modul zu importieren.

Was Sie wollen, ist import * as angular from 'angular'; , das den gesamten Export als Variable importiert.

    
thoughtrepo 01.09.2015 17:11
quelle