2016-06-05 26 views
30

Mi piace usare rx-node entro dattiloscrittoTypeScript: come definire i tipi di battitura personalizzati per il pacchetto npm installato?

import RxNode from 'rx-node'; 

ho installato rx-node utilizzando npm

$ npm install rx-node --save 

Ho cercato per definizioni di tipo, ma senza alcun risultato

$ typings search rx-node 
No results found for search 

Come posso definire personalizzato definizioni di tipo per il modulo npm installato rx-node? Dove devo archiviare il file di definizione del tipo? Come configurare TypeScript (tsconfig.json e typings.json)?

Edit: Grazie a Aleksey L. e David Bohunek ho raggiunto per definire un rx-node.d.ts che assomiglia a questo

declare module "rx-node" { 
    import {Observable} from '@reactivex/rxjs'; 
    import {ReadLine} from "readline"; 

    function fromReadLineStream(stream: ReadLine): Observable<string> 
} 

ho installato @reactivex/rxjs

npm install --save @reactivex/rxjs 

Da quando ho ottenuto un errore

node_modules\@reactivex\rxjs\dist\cjs\Observable.d.ts (10,66): Cannot find name 'Promise'. (2304) 

Ho cambiato l'obiettivo in tsconfig.json a es6.

risposta

34

È possibile aggiungere definizioni personalizzate a typings.json. Ad esempio avendo seguente struttura di cartelle:

/typings 
    /custom 
     rx-node.d.ts 
    /global 
     ... 

dove rx-node.d.ts è il file di battitura personalizzato. Per esempio:

declare module RxNode { 
    export interface ... 
} 

quindi installare con un comando

typings install file:typings/custom/rx-node.d.ts --save --global 

o manualmente: in typings.json aggiungere riferimento a questo file tipizzazioni:

{ 
    "name": "TestName", 
    "version": false, 
    "globalDependencies": { 
     "rx-node": "file:typings/custom/rx-node.d.ts" 
    } 
} 

And Run typings install

+0

L'esecuzione di 'typings install' copia' typings/custom/rx-node.d.ts' a 'typings/globals/rx-node/index.d. ts'. Se cambio la definizione del tipo, devo eseguire di nuovo 'typings install' per copiare le modifiche. Qual è il vantaggio di questo approccio rispetto al riferimento a 'rx-node.d.ts' manualmente in' index.d.ts'? – maiermic

+1

Personalmente preferisco non modificare i file generati automaticamente (e aggiungere la regola ignora nel controllo del codice sorgente). Inoltre, una volta definite le tipizzazioni, queste non cambieranno fino a quando non verrà modificata la libreria originale. E una volta che la versione "ufficiale" è disponibile, può essere facilmente sostituita. –

+0

Suppongo che questo approccio sia cambiato da TypeScript 2.x, dato che la cartella 'typings' è ridondante e tutte le tipizzazioni sono installate tramite npm in node_modules/@ types/...? Esiste un approccio raccomandato per la tipizzazione personalizzata per le definizioni mancanti? – Squiggle

1

Creare un nuovo file, denominato rx-node.d.ts e assicurarsi che sia referenziato nello tsconfig.json direttamente o da un altro file, ad esempio typings/index.d.ts. Poi si può iniziare con qualcosa di simile:

///<reference path="rx.d.ts" /> 

declare namespace RxNode { 

    export interface Emitter<T>{ 

    } 

    export function toEventEmitter<T>(observable: Rx.Observable<T>, eventName: string): Emitter<T>; 
} 

Questa domanda/risposta potrebbe essere helpuful: How to write d.ts file from existing .js file?

Se si crea un file di tipizzazioni definizione di bello, di alta qualità, contribuiscono a https://github.com/DefinitelyTyped/DefinitelyTyped

+1

Grande, c'è già una [richiesta pull] (https: // github.com/Reactive-Extensions/rx-node/pull/17): D – maiermic