2016-06-06 20 views
12

Io uso node.js e di recente ho deciso di dare a TypeScript un colpo, ma sono piuttosto confuso su come i moduli vengono importati. Vedo due sintassi diverse che non riesco a scoprire esattamente quale sia la loro differenza:Differenza tra `import from` e` import require` in TypeScript

import * as a from 'a'; // ES6 standard to import stuff 
// OR ... 
import a = require('a'); 

Sono la stessa cosa? e se non lo sono, dove dovrei usare ognuno di loro?

risposta

11

import * as a from 'a'; è la nuova sintassi di importazione "stile ES6" (disponibile dal Typescript 1.5).

Se possibile, questa sintassi dovrebbe essere ora utilizzata.

C'è comunque un avvertimento. La sintassi di importazione ES6 può importare solo i moduli (come definito da ES6) o gli oggetti (classi, interfacce, vars, ...) esportati come parte di un modulo.

Alcuni Librairies Javascript esporterà direttamente una funzione o di classe, e il file di definizione corrispondente tipicamente simile a questa:

declare module "my-class" { 

    class MyClass { ... } 

    export = MyClass 
} 

In questo caso, il "vecchio" sintassi di importazione è l'unico che può essere utilizzato

import MyClass = require("my-class"); 

il mancato utilizzo di questa sintassi si tradurrà in TS2497 errore

Verificare this issue per i dettagli e una possibile soluzione alternativa che sarebbe, nel caso precedente, aggiungere una dichiarazione di modulo vuota al file di definizione

declare module "my-class" { 

    class MyClass { ... } 

    module MyClass {} // <= 

    export = MyClass 
} 
+0

Quando richiede funziona per tutti i casi (come sembra) perché dovrei usare la sintassi 'importa da' allora? – Rsh

+1

@Rsh perché vuoi essere il più compatibile ES6 possibile, in modo che Typescript rimanga un superset di Javascript, non una lingua dalla sua parte. –