2016-04-23 14 views
6

Sto cercando di scrivere un pacchetto per il nodo in TypeScript che utilizza librerie di nodi standard, ad esempio fs, path, stream, http e così via.Come posso richiedere e dichiarare correttamente le tipizzazioni della libreria di nodi in TypeScript?

Quando si tenta di importare le librerie in un file .ts, VS Code contrassegna la riga corrispondente con un errore:
[ts] Cannot find module 'fs'. Questo accade non importa come provo a importare la libreria:

import * as fs from 'fs'; // [ts] Cannot find module 'fs' 
import fs = require('fs'); // [ts] Cannot find module 'fs' 
const fs = require('fs'); // [ts] Cannot find name 'require' 

enter image description here

I (dovrebbe) avere le definizioni corrette installate con typings install --save --ambient node.

Quando compilo a JavaScript (utilizzando gulp e gulp-typescript, non tsc), il compliation funziona e la evidenziazione della sintassi mostra nessun errore fino digito 1 carattere ancora:

enter image description here

Come posso definire correttamente le librerie di nodi per TypeScript?


io uso Codice VS per l'evidenziazione del codice e il completamento automatico, gulp & gulp-typescript per compilare e typings per le dichiarazioni di libreria dattiloscritto.

struttura della directory del progetto:

├─ build/ 
│ └─ (output files) 
├─ src/ 
│ └─ myfile.ts 
├─ typings/ 
│ ├─ browser/ 
│ │ └─ ambient/ 
│ │  └─ node/ 
│ │  └─ index.d.ts 
│ ├─ main/ 
│ │ └─ ambient/ 
│ │  └─ node/ 
│ │  └─ index.d.ts 
│ ├─ browser.d.ts 
│ └─ main.d.ts 
├─ gulpfile.js 
├─ package.json 
├─ tsconfig.json 
└─ typings.json 

mio tsconfig.json:

{ 
    "compileOnSave": false, 
    "compilerOptions": { 
     "declaration": true, 
     "module": "system", 
     "moduleResolution": "node", 
     "noEmitOnError": true, 
     "noImplicitAny": true, 
     "target": "es5" 
    }, 
    "exclude": [ 
     "node_modules", 
     "typings/browser", 
     "typings/browser.d.ts" 
    ] 
} 

mio typings.json:

{ 
    "ambientDependencies": { 
    "node": "registry:dt/node#4.0.0+20160412142033" 
    } 
} 

E il mio compito sorso:

gulp.task('build-typescript',() => { 
    const gulpts = require('gulp-typescript'); 
    const tsProject = gulpts.createProject('tsconfig.json', { 
     typescript: require('typescript'), 
     outFile: 'mylibrary.js', 
     noLib: true 
    }); 

    let tsstream = (
     gulp.src([ 
      'node_modules/typescript/lib/lib.es6.d.ts', 
      'typings/main.d.ts', 
      'src/sharpscript.ts']) 
     .pipe(sourcemaps.init()) 
     .pipe(gulpts(tsProject)) 
    ); 

    return require('merge2')(
     tsstream.dts.pipe(gulp.dest('build')), 
     tsstream.js 
      .pipe(sourcemaps.write('.', { includeContent: true })) 
      .pipe(gulp.dest('build')) 
    ); 
}); 

Nel caso in cui qualcuno abbia riscontrato lo stesso problema, sono grato per qualsiasi intuizione.

+0

Qual è il risultato del comando 'tsc'? – alisabzevari

+0

Se si utilizzano versioni precedenti di VSCode, è necessario eseguire il comando "Reload Typescript Project" in VSCode. – alisabzevari

+0

@alisabzevari Non sto usando 'tsc' per compilare poiché compilo il progetto in' mylibrary.js' e i test (nelle stesse cartelle) in 'mylibrary.tests.js', cosa che non è possibile con' tsc'. Io uso 'gulp-typescript'. –

risposta

1

l'installazione di dichiarazioni di tipo con 'typings install ...' è obsoleta da alcuni mesi. Il nuovo modo è installarlo direttamente tramite npm e lo spazio dei nomi @types. per installare le dichiarazioni del tipo di nodo utilizzare solo npm install @types/node --save-dev.