Ich habe die folgenden webpack.config.js
var path = require("path");
var webpack = require('webpack');
module.exports = {
entry: {
'ng2-auto-complete': path.join(__dirname, 'src', 'index.ts')
},
resolve: {
extensions: ['', '.ts', '.js', '.json', '.css', '.html']
},
output: {
path: path.join(__dirname, 'dist'),
filename: "[name].umd.js",
library: ["[name]"],
libraryTarget: "umd"
},
externals: [
/^rxjs\//, //.... any other way? rx.umd.min.js does work?
/^@angular\//
],
devtool: 'source-map',
module: {
loaders: [
{ // Support for .ts files.
test: /\.ts$/,
loaders: ['ts', 'angular2-template-loader'],
exclude: [/test/, /node_modules\/(?!(ng2-.+))/]
}
]
}
};
und die folgende tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"noEmitHelpers": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"sourceMap": true,
"pretty": true,
"allowUnreachableCode": true,
"allowUnusedLabels": true,
"noImplicitAny": false,
"noImplicitReturns": false,
"noImplicitUseStrict": false,
"noFallthroughCasesInSwitch": false,
"allowSyntheticDefaultImports": true,
"suppressExcessPropertyErrors": true,
"suppressImplicitAnyIndexErrors": true,
"outDir": "dist",
"baseUrl": "src"
},
"files": [
"src/index.ts"
],
"exclude": [
"node_modules"
],
"compileOnSave": false,
"buildOnSave": false
}
Wenn ich den tsc
Befehl wie folgt ausführe , funktioniert alles einwandfrei.
ng2-auto-complete (master)$ tsc --declaration
ng2-auto-complete (master)$
Wenn ich einen webpack
Befehl ausführe , werden Typenskript-Kompilierungsfehler angezeigt.
ng2-auto-complete (master)$ webpack
ts-loader: Using typescript@2.0.0 and /Users/allen/github/ng2-auto-complete/tsconfig.json
Hash: bd6c50e4b9732c3ffa9d
Version: webpack 1.13.2
Time: 5041ms
Asset Size Chunks Chunk Names
ng2-auto-complete.umd.js 24.4 kB 0 [emitted] ng2-auto-complete
ng2-auto-complete.umd.js.map 28.4 kB 0 [emitted] ng2-auto-complete
+ 11 hidden modules
ERROR in /Users/allen/github/ng2-auto-complete/node_modules/@angular/platform-browser/src/dom/dom_renderer.d.ts
(18,37): error TS2304: Cannot find name 'Map'.
ERROR in /Users/allen/github/ng2-auto-complete/node_modules/@angular/platform-browser/src/dom/dom_adapter.d.ts
(96,42): error TS2304: Cannot find name 'Map'.
ERROR in /Users/allen/github/ng2-auto-complete/node_modules/@angular/platform-browser/src/web_workers/worker/location_providers.d.ts
(21,86): error TS2304: Cannot find name 'Promise'.
...
ng2-auto-complete (master)$
Ich weiß nicht, was mir für die Erstellung von Webpacks und Typoskripten fehlt.
node_modules
wurde in ausgeschlossen tsconfig.json
"ausschließen": ["node_modules"],
und Typdefinitionen sind dort in node_modules
"devDependencies": {
"@types/core-js": "^0.9.32",
"@types/node": "^6.0.31"
Ich habe auch versucht, typings.json
ein Verzeichnis ohne Erfolg zu verwenden und zu tippen.
{
"globalDependencies": {
"core-js": "registry:dt/core-js#0.0.0+20160725163759",
"jasmine": "registry:dt/jasmine#2.2.0+20160621224255",
"node": "registry:dt/node#6.0.0+20160815222444"
}
}
Zu Ihrer Information, Versionen
$ node --version
v5.7.1
$ npm --version
3.6.0
$ tsc --version
Version 2.0.0
Wie entferne ich TS2304-Fehler mit dem webpack
Befehl?
typescript
webpack
allenhwkim
quelle
quelle
Antworten:
Ich habe dies hinzugefügt, um darin zu arbeiten
tsconfig.json
, und es scheint ohne Fehler zu funktionieren."compilerOptions": { "target": "es5", "lib": ["es5", "es6", "dom"], <--- this ... }
Ich bin nicht sicher, ob
lib
es sich um eine Typescript 2.0-Funktion handelt oder nicht, aber ich habe herausgefunden, dass mehrere Bibliotheken verfügbar sindAus dem Typoskript-Konfigurationsschema (beachten Sie die es2015.collection)
"lib": { "description": "Specify library file to be included in the compilation. Requires TypeScript version 2.0 or later.", "type": "array", "items": { "type": "string", "enum": [ "es5", "es6", "es2015", "es7", "es2016", "es2017", "dom", "webworker", "scripthost", "es2015.core", "es2015.collection", "es2015.generator", "es2015.iterable", "es2015.promise", "es2015.proxy", "es2015.reflect", "es2015.symbol", "es2015.symbol.wellknown", "es2016.array.include", "es2017.object", "es2017.sharedmemory" ] } }
Dies löst die Kompilierungsfehler, aber ich frage mich immer noch, warum der
tsc
Befehl fehlerfrei funktioniert, aberwebpack
nicht.tsc
sucht nach allen möglichen Bibliotheken ohne Verwendunglib
vontsconfig.json
?quelle
Map
,Set
UndPromise
sindES6
Funktionen.In Ihrem verwenden
tsconfig.json
Sie:"target": "es5"
Dies führt dazu, dass der Compiler die normale
es5
lib.d.ts verwendet , der die Definitionen für die oben genannten Typen fehlen.Sie möchten die lib.es6.d.ts verwenden :
"target": "es6"
quelle
es5
Code zu generieren . Wenn das Ziel istes6
, funktioniert es dann immer noch mit einem niedrigeren Browser, z. B. 'IE11'?Promise
undMap
dann verwenden möchten, müssen Sie es6 als Ziel festlegen oder die Definitionen dessen, was Sie benötigen, aus demlibe.es6.d.ts
es6
Objekte; Map, Promise, sollte ines5
Objekte konvertiert werden. Somit sollte das Zieles5
nicht seines6
. Habe ich recht?Einfach hinzufügen:
"lib": ["es6"] // means at least ES6
Ändere das Ziel nicht. Ziel wird verwendet, um Typescript mitzuteilen, in welche Version von ECMAScript Ihre
.ts
Dateien kompiliert werden sollen. Natürlich können Sie es ändern, wenn der Browser, in dem Ihre Anwendung ausgeführt wird, diese Version von ECMAScript unterstützt.Zum Beispiel benutze ich
"target": "es5"
und"lib": ["es6"]
.Ein weiterer Grund könnte sein:
Dass Ihre
.ts
Datei nicht unter ist"rootDir": "./YourFolder",
quelle
lib
Option standardmäßig mehr als eine Bibliothek enthält. In den obigen Beispielen werden andere Standardbibliotheken wieDOM
undScriptHost
(undDOM.Iterable
für ES6-Ziele) gelöscht.Wenn Sie sich fragen, warum keine dieser Korrekturen für Sie funktioniert , denken Sie daran - wenn Sie die zu kompilierende Datei in der Befehlszeile oder in package.json angeben, liest tsc Ihre Datei tsconfig.json NICHT und hat daher keine Auswirkungen. Geben Sie stattdessen die "Dateien" und "outDir" in Ihrer Datei tsconfig.json an, und eine der Korrekturen "lib" wird wahrscheinlich für Sie funktionieren. Dann kompilieren Sie nur mit:
tsc --sourcemaps
quelle
--sourceMap
tsc index.ts --lib "es6"
Wenn das Hinzufügen von lib in tsconfig.json nicht funktioniert, verwenden Sie die obige Befehlszeilenoption
quelle
Ich musste die Core-Js-Typisierungen von npm installieren, um das Problem zu lösen
Erklärung :
Das Ziel von @types npm-Paketen ist es, Typdefinitionen mit npm zu erhalten. Die Verwendung dieser Typdefinitionen ist eine TypeScript 2.0- Funktion.
@types ersetzen aktuelle Tools wie typings und tsd , obwohl diese noch einige Zeit unterstützt werden.
quelle
Da die Antwort direkt an das OP bereits beantwortet wurde, dachte ich, ich würde hinzufügen, was sie für mich behoben hat. Meine Situation war insofern etwas anders, als ich kein WebPack verwendete und diese Fehler beim Versuch, tsc zu verwenden, erhielten. Die Antwort, die alle anderen geben (füge "es6" zu lib hinzu), hat es für mich nicht gelöst. Das Problem für mich war, dass ich v9.11.1 des Knotens auf meinem Computer installiert hatte, aber ich hatte npm verwendet, um "@ types / node" zu holen, das das neueste, v10 +, bekam. Nachdem ich diese Knotentypisierung deinstalliert und eine bestimmte v9-Knotentypisierungsdatei installiert hatte, wurde dieses Problem behoben.
quelle
https://stackoverflow.com/a/44800490/9690407
ist in npm 5.6.0 veraltet! Verwenden Sie stattdessen die
npm install @types/core-js
Syntax.quelle
Um diesen Fehler zu beheben, ändern Sie die folgenden Eigenschaften in der Datei tsconfig.json.
"lib": [ "es2018", "dom", "es5", "es6" ], "module": "es2015", "target": "es6"
Führen Sie danach den folgenden Befehl im Terminal aus.
FEHLER BEHOBEN.
quelle
Ich benutze
node.js v10.16.3.
Das Problem für mich war, dass der Typoskript-Compiler meinetsconfig.json
Datei ignorierte .Drei Lösungen haben für mich funktioniert:
tsc filename.ts --lib "es6", "dom"
Sie dies, wenn Sie die Datei kompilieren@types/node
diese, damit Sietsc filename.ts
fehlerfrei ausgeführt werden können.quelle
Ändern Sie in Ihrer tsconfig.json einfach "target": "es5" in "target": "es6".
quelle
für es6 benutze dies
quelle
In meinem Fall musste ich laufen:
Das hat mein Problem gelöst.
quelle
Um dies zu lösen, müssen Sie nur die Kartenmethode wie folgt in Ihre ts-Datei importieren:
import { map } from 'rxjs/operators';
quelle
Für mich war die Lösung zu installieren
@types/node
:Oder wenn Sie npm bevorzugen:
Ich nehme jedoch an, dass es eine gute Praxis ist, "es6" in das "lib"
tsconfig.json
-Array aufzunehmen , wenn Sie weiterhin "Map", "Set" oder "Promise" verwenden möchten.quelle