node.js - Diferența dintre import http=require('http'); și import * as http from 'http';?
Nu am reușit să găsesc un tutorial valoros de NodeJS cu Typescript, așa că mă arunc direct și, bineînțeles, am o întrebare.
Nu înțeleg diferența dintre aceste două linii:
import * as http from 'http';
// and
import http = require('http');
Par să funcționeze în același mod, dar îmi imaginez că există probabil unele nuanțe în comportamentul lor, altfel probabil unul dintre ele nu ar exista.
Înțeleg că prima abordare mi-ar permite să import selectiv dintr-un modul, dar dacă import întreg modulul, există vreo diferență între cele două? Există o modalitate preferată? Dar dacă import din propriile mele fișiere, schimbă asta ceva?
Răspuns #1
În prima formă, creezi un obiect http în codul tău (complet curat), apoi, interpretul va căuta fiecare import posibil în modulul http și îl va adăuga, unul câte unul, la obiectul http din codul tău, acest lucru fiind puțin mai lent (nu foarte mult) decât în a doua formă, unde iei obiectul module.exports definit în modulul http, apoi copiezi această referință într-un nou obiect http în codul tău; acesta este un obiect într-o funcție specială a node-ului cu un context particular, nu doar un obiect creat în codul tău cu conținutul modulului.
Răspuns #2
import http = require('http') //Common JS
Acestea sunt module Common JS. Înainte de versiunea 12.2, aceasta era singura modalitate de a folosi module în Node JS.
import * as http from 'http'; //ES 6
Acesta este un modul ES6. În standardele ECMAScript 6, modulele sunt suportate nativ de Javascript. Node JS a implementat această funcție în versiunea 12.2.
Dintre aceste două, întotdeauna prefer modulul ES6 deoarece face parte din implementarea JavaScript. Modulul ES6 este de asemenea suportat de browser. Dar Common JS nu este suportat de browser deoarece este sincron. Modulul AMD a fost folosit în browser înainte de ES6 deoarece este asincron, spre deosebire de CommonJS.
