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'
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:
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.
Was ist das Ergebnis des 'tsc' Befehls? – alisabzevari
Wenn Sie ältere Versionen von VSCode verwenden, müssen Sie in VSCode den Befehl "Reload Typescript Project" ausführen. – alisabzevari
@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'. –