2016-03-01 18 views
7

Ich konnte keinen lohnenswerten NodeJS mit Typescript Tutorial da draußen finden, also tauche ich ungeführt und sicher genug habe ich eine Frage.Unterschied zwischen dem Import http = require ('http'); und importieren * als http von "http" ;?

Ich verstehe nicht den Unterschied zwischen diesen beiden Linien:

import * as http from 'http'; 
// and 
import http = require('http'); 

Sie scheinen die gleiche Art und Weise zu funktionieren, aber ich denke, es gibt wahrscheinlich einige Nuance auf ihr Verhalten oder sonst einer von ihnen würde wahrscheinlich nicht existieren .

Ich verstehe, dass der erste Ansatz mich selektiv von einem Modul importieren konnte, aber wenn ich das ganze Modul importiere, gibt es dann einen Unterschied zwischen den beiden? Gibt es einen bevorzugten Weg? Was passiert, wenn ich aus meinen eigenen Dateien importiere?

+0

Mögliche Duplikate von [Typescript import/as vs import/require?] (Http://stackoverflow.com/questions/35706164/typescript-import-as-vs-import-require) – rgvassar

+0

Mögliches Duplikat von [New es6 syntax für den Import von commonjs/amd-Modulen zB \ import foo = require ('foo') \ '] (http://stackoverflow.com/questions/29596714/new-es6-syntax-for-importing-commonjs-amd-modules- ie-import-foo-require) –

Antwort

4

In der ersten Form, erstellen Sie ein http Objekt in Ihrem Code (total sauber), dann wird der Interpreter für jeden möglichen Import sucht Modul in http und hängen Sie es, eines nach der anderen, bis die http Objekt in Ihrem Code, das ist ein wenig langsamer (nicht viel) als die zweite Form, wo Sie bekommen die module.exports Objekt im Modul http definiert, dann Kopieren diesen Verweises auf ein neues http Objekt In Ihrem Code ist dies ein Objekt in einer speziellen Knotenfunktion mit einem bestimmten Kontext, nicht nur ein Objekt, das in Ihrem Code mit dem erstellt wird Inhalt des Moduls.

1

In einer Knotenumgebung, in der Sie den Modultyp als gemeinsamen JS konfiguriert haben, ist die Ausgabe identisch. Andere Modul-Frameworks verwenden eine andere Syntax und durch die Verwendung des ersten Ansatzes haben Sie die Flexibilität, dies nach Belieben zu ändern.

Auch der Ansatz import * as http from 'http'; ist, dass es die ES6-Modul-Import-Syntax ist, sobald Sie also in einer Umgebung sind, die ES6 vollständig unterstützt, werden Ihre Importe einfach funktionieren.

Verwandte Themen