2016-02-29 18 views
29

Używam TypeScript z Express/Node.js.Import maszynopisu/jak i import/wymagają?

Dla spożywających modułów maszynopisu Podręcznik przedstawia następującą składnię:

import express = require('express');

ale również plik typescript.d.ts Wystawy:

import * as express from "express";

Ja również wyszukiwane blogu MSDN, ale nie mógł znaleźć cokolwiek.

Który z nich jest bardziej poprawny na początku 2016 roku? Jakie są różnice między tymi dwoma, jeśli takie istnieją?

Gdzie jest najlepsze źródło informacji na temat najnowszej składni, aby można było znaleźć tę informację w przyszłości?

+2

Nie mam pojęcia, co jest najlepsze, ale jest to bardzo dobre https://github.com/Microsoft/TypeScript/wiki/What's-new-in-TypeScript –

Odpowiedz

55

Są to w większości równoważne, ale import * ma pewne ograniczenia, których nie ma import ... = require.

import * as tworzy identyfikator, który jest przedmiotem moduł nacisk na obiektu. Zgodnie ze specyfikacją ES6 obiekt ten nigdy nie jest możliwy do wywołania lub jest w stanie - ma tylko właściwości. Jeśli próbujesz importować funkcji lub klasy, należy użyć

import express = require('express'); 

lub (w zależności od modułu ładującego)

import express from 'express'; 

Próba użycia import * as express a następnie powołując express() zawsze jest nielegalne według specyfikacja ES6. W niektórych środowiskach wykonawczych + transpilacji może to i tak zadziałać, ale może się zepsuć w dowolnym momencie w przyszłości bez ostrzeżenia, co sprawi, że będziesz smutny.

+3

"Ogólnie należy używać składni ES6, chyba że mieć jakiś powód, by nie (nie mogę wymyślić żadnego offhand) "FWIW I [dał odpowiedź, dlaczego nie] (http://stackoverflow.com/a/29598404/252087) w [to duplikacie tutaj tutaj] (http: //stackoverflow.com/questions/29596714/new-es6-syntax-for-importing-commonjs-amd-modules-ie-import-foo- request). –

+0

Jestem trochę zdezorientowany między pozorną sprzecznością tutaj. Jakiej rady mam przestrzegać? @CSnover to Twoja rada, która jest tak aktualna jak dzisiaj, w 2016 r., Tak jak wtedy, gdy ją opublikowałeś? Dziękuję Ci. –

+1

@AdamThompson tak, patrz część "Aktualizacja 2016". –

3
import * as express from "express"; 

Jest to sugerowany sposób, ponieważ jest to standard dla JavaScript (ES6/2015) od zeszłego roku.

W każdym przypadku w pliku tsconfig.json powinieneś kierować opcję modułu na commonjs, czyli format obsługiwany przez nodejs.