Webpack TS2304 Не удается найти имя "Карта", "Установить", "Обещать",
У меня есть следующий 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-.+))/]
}
]
}
};
и следующий 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
}
Когда я запускаю команду tsc
следующим образом, все работает нормально.
ng2-auto-complete (master)$ tsc --declaration
ng2-auto-complete (master)$
Когда я запускаю команду webpack
, она показывает typescript ошибки компиляции.
ng2-auto-complete (master)$ webpack
ts-loader: Using [email protected] 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)$
Я не знаю, чего мне не хватает для webpack и компиляции typescript.
node_modules
исключен в tsconfig.json
"исключить": [ "node_modules" ],
и определения типов находятся в node_modules
"devDependencies": {
"@types/core-js": "^0.9.32",
"@types/node": "^6.0.31"
Я также попытался использовать typings.json
и каталог с образцами без успеха.
{
"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"
}
}
FYI, версии
$ node --version
v5.7.1
$ npm --version
3.6.0
$ tsc --version
Version 2.0.0
Как избавиться от ошибок TS2304 с помощью команды webpack
?
Ответы
Ответ 1
Я добавил, что это работает в tsconfig.json
, и кажется, что он работает без ошибок.
"compilerOptions": {
"target": "es5",
"lib": ["es5", "es6", "dom"], <--- this
...
}
Я не уверен, что lib
для функции Typescript 2.0 или нет, но выяснили, что доступно несколько библиотек
Из схемы конфигурации Typescript (обратите внимание на 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" ]
}
}
Это решает ошибки компиляции, но мне все еще интересно, почему команда tsc
работает без каких-либо ошибок, но webpack
нет. tsc
ищет все возможные библиотеки, не используя lib
на tsconfig.json
?
Ответ 2
Map
, Set
и Promise
являются функциями ES6
.
В вашем tsconfig.json
вы используете:
"target": "es5"
Это заставляет компилятор использовать обычный es5
lib.d.ts, который испытывает недостаток определения для указанных выше типов.
Вы хотите использовать lib.es6.d.ts:
"target": "es6"
Ответ 3
Ничего не меняй, а добавь:
"lib": ["es6"] // means at least ES6
Не меняйте цель. Target используется, чтобы указать Typescript, в какую версию ECMAScript скомпилировать ваши файлы .ts
. Конечно, вы можете изменить его, если браузер, в котором будет работать ваше приложение, будет поддерживать эту версию ECMAScript.
Например, я использую "target": "es5"
и "lib": ["es6"]
.
Другая причина может быть:
Что ваш файл .ts
не находится в "rootDir": "./YourFolder",
Ответ 4
tsc index.ts --lib "es6"
Если добавление lib не работает в tsconfig.json, используйте вышеуказанный параметр командной строки
Ответ 5
Если вам интересно, почему ни одно из этих исправлений не работает, имейте в виду - если вы укажете файл для компиляции в командной строке или package.json, tsc НЕ будет читать ваш файл tsconfig.json и, следовательно, не будет иметь никакого эффекта. Вместо этого укажите "files" и "outDir" в вашем tsconfig.json, и одно из исправлений "lib", вероятно, подойдет вам. Затем скомпилируйте только с:
tsc --sourcemaps
Ответ 6
Мне пришлось установить основные значения js из npm для решения проблемы
npm install @types/core-js
объяснение:
Цель пакетов @types npm - получить определения типов с npm. Использование этих определений типов - это TypeScript 2.0.
@types заменить текущие инструменты, такие как типизация и tsd, хотя они будут продолжать поддерживаться в течение некоторого времени.
Ответ 7
fooobar.com/questions/101419/...
npm install typings -g typings install
устарела в npm 5.6.0!
Вместо этого используйте синтаксис npm install @types/core-js
.
Ответ 8
Поскольку ответ непосредственно на ФП уже получен, я решил добавить, что для меня исправлено. Моя ситуация немного отличалась тем, что я не использовал WebPack и получал эти ошибки при попытке использовать tsc. Ответ, который дают все остальные (добавьте "es6" в lib), не помог мне. Проблема для меня заключалась в том, что на моей машине был установлен v9.11.1 узла, но я использовал npm, чтобы получить "@types/node", которая получила самую последнюю версию v10+. После того, как я удалил эту типизацию узлов и установил определенный файл типизации узлов v9, эта проблема была решена.
Ответ 9
В вашем tsconfig.json просто измените "target": "es5" на "target": "es6"
Ответ 10
В моем случае мне пришлось бежать:
npm install typings -g
typings install
Это решило мою проблему.
Ответ 11
Чтобы устранить эту ошибку, измените следующие свойства в файле tsconfig.json.
"lib": [
"es2018",
"dom",
"es5",
"es6"
],
"module": "es2015",
"target": "es6"
После этого выполните следующую команду в терминале.
npm install @types/es6-shim
ОШИБКА РЕШЕНА.
Ответ 12
для es6 используйте это
tsc filename.ts --lib es2015