2016-04-23 8 views
6

Ich versuche, ein Paket für Knoten in TypeScript zu schreiben, die Standard-Knotenbibliotheken verwendet, z. B. fs, path, stream, http und so weiter.Wie berechtige und deklariere ich korrekt die Typbeschreibungen der Knotenbibliotheken in TypeScript?

Wenn ich versuche, Bibliotheken in einer .ts-Datei zu importieren, markiert VS-Code die entsprechende Zeile mit einem Fehler:
[ts] Cannot find module 'fs'. Dies geschieht, egal wie ich versuche, die Bibliothek zu importieren:

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 (soll) die richtigen mit typings install --save --ambient node installiert Definitionen.

Als ich JavaScript kompilieren (mit gulp und gulp-typescript, nicht tsc), die compliation arbeitet und die Syntax zeigt keine Fehler hervorheben, bis ich in 1 Zeichen erneut eingeben:

enter image description here

Wie kann ich die Knotenbibliotheken für TypeScript korrekt definieren?


verwende ich VS-Code für die Code-Hervorhebung und Auto-Vervollständigung, gulp & gulp-typescript zu kompilieren und typings für die Typoskript Bibliothek Erklärungen.

Die Verzeichnisstruktur des Projekts:

├─ 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 

Mein 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" 
    ] 
} 

Mein typings.json:

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

Und meine schluck Aufgabe:

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')) 
    ); 
}); 

Falls jemand das gleiche Problem erlebt hat, bin ich dankbar für alle Einsichten.

+0

Was ist das Ergebnis des 'tsc' Befehls? – alisabzevari

+0

Wenn Sie ältere Versionen von VSCode verwenden, müssen Sie in VSCode den Befehl "Reload Typescript Project" ausführen. – alisabzevari

+0

@alisabzevari Ich verwende 'tsc' nicht, um zu kompilieren, da ich das Projekt nach' mylibrary.js' und die Tests (in den gleichen Ordnern) nach 'mylibrary.tests.js' kompiliere, was mit' tsc' nicht möglich ist. Ich benutze 'Schluck-Typoskript'. –

Antwort

1

Die Installation von Typdeklarationen mit 'typings install ...' ist seit einigen Monaten veraltet. Der neue Weg besteht darin, es direkt über npm und den @types-Namespace zu installieren. Um die Deklarationen des Knotentyps zu installieren, benutzen Sie einfach .