2016-05-03 8 views

risposta

1

Il trucco è quello di utilizzare la notazione puramente JavaScript:

const co = require('co'); 
7

Le opzioni sono a uno importarlo al di fuori del sistema del modulo di dattiloscritto (chiamando il modulo API come RequireJS o Nodo direttamente a mano) in modo che doesn' t provare a convalidarlo o aggiungere una definizione del tipo in modo da poter utilizzare il sistema del modulo e farlo convalidare correttamente. È tuttavia possibile eseguire lo stub della definizione del tipo, quindi questo può essere uno sforzo molto basso.

Utilizzando nodo (CommonJS) importa direttamente:

// Note there's no 'import' statement here. 
var loadedModule: any = require('module-name'); 

// Now use your module however you'd like. 

Uso RequireJS direttamente:

define(["module-name"], function (loadedModule: any) { 
    // Use loadedModule however you'd like 
}); 

essere consapevoli che in uno di questi casi questo può mescolare stranamente con l'utilizzo reale normale Il modulo TypeScript importa nello stesso file (puoi finire con due strati di definizione del modulo, specialmente sul lato RequireJS, dato che TypeScript prova a gestire i moduli anche tu invecchiamento a mano). Consiglierei l'utilizzo di questo approccio o l'utilizzo di definizioni di tipo reali.

Tipo Stubbing definizioni:

Come definizioni tipo corretto sarebbe meglio, e se queste sono disponibili o hai tempo di scrivere voi stessi dovete assolutamente dovrebbe.

In caso contrario, però, si può solo dare tutto il vostro modulo tipo any, e mettere il modulo nel sistema di moduli senza dover digitare in realtà:

declare module 'module-name' { 
    export = <any> {}; 
} 

Questo dovrebbe consentire di importare module-name e hanno TypeScript sa di cosa stai parlando. Dovrai comunque assicurarti che l'importazione di nome-modulo lo carichi effettivamente in fase di esecuzione con qualsiasi sistema di moduli che stai usando, altrimenti verrà compilato ma non verrà effettivamente eseguito.

+0

Potresti spiegare dove dovremmo inserire questo file (quando si definiscono le definizioni del tipo) e con quale nome di file? Non so quale sia il "sistema dei moduli", immagino che il dattiloscritto non conosca i moduli del nodo, quindi dovremmo dire dove sono. –

+0

Come posso creare uno stub che soddisfi un'importazione come 'import {Provider} da 'react-redux''? – jbandi

1

ho ottenuto un errore quando ho usato l'approccio "definizioni di sradicamento di tipo" in risposta di Tim Perry: error TS2497: Module ''module-name'' resolves to a non-module entity and cannot be imported using this construct.

La soluzione era quella di rielaborare il file stub .d.ts leggermente:

declare module 'module-name' { 
    const x: any; 
    export = x; 
} 

e poi si può importazione via:

import * as moduleName from 'module-name'; 

Creazione di un proprio file di stub abbassa la barriera per scrivere le dichiarazioni reali quando ne hai bisogno .

Problemi correlati