Угловой: не удается найти обещание, карту, набор и итератор
после установки Angular, компилятор Typescript продолжает получать некоторые ошибки о not finding Promise,Map,Set и Iterator.
до сих пор я игнорировал их, но теперь мне нужно Promise Так что мой код может работать.
import {Component} from 'angular2/core';
@Component({
selector: 'greeting-cmp',
template: `<div>{{ asyncGreeting | async}}</div>`
})
export class GreetingCmp {
asyncGreeting: Promise<string> = new Promise(resolve => {
// after 1 second, the promise will resolve
window.setTimeout(() => resolve('hello'), 1000);
});
}
Additional information:
npm -v is 2.14.12
node -v is v4.3.1
typescript v is 1.6
ошибки:
................ERROS OF MY CODE.................
C:UsersarmyTikDesktopangular2greeting_cmp.ts
Error:(7, 20) TS2304: Cannot find name 'Promise'.
Error:(7, 42) TS2304: Cannot find name 'Promise'.
.........................................
C:UsersarmyTikDesktopangular2node_modulesangular2platformbrowser.d.ts
Error:(77, 90) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2node_modulesangular2srccoreapplication_ref.d.ts
Error:(83, 60) TS2304: Cannot find name 'Promise'.
Error:(83, 146) TS2304: Cannot find name 'Promise'.
Error:(96, 51) TS2304: Cannot find name 'Promise'.
Error:(96, 147) TS2304: Cannot find name 'Promise'.
Error:(133, 90) TS2304: Cannot find name 'Promise'.
Error:(171, 81) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2node_modulesangular2srccorechange_detectionparserlocals.d.ts
Error:(3, 14) TS2304: Cannot find name 'Map'.
Error:(4, 42) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2node_modulesangular2srccoredebugdebug_node.d.ts
Error:(14, 13) TS2304: Cannot find name 'Map'.
Error:(24, 17) TS2304: Cannot find name 'Map'.
Error:(25, 17) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2node_modulesangular2srccorediprovider.d.ts
Error:(436, 103) TS2304: Cannot find name 'Map'.
Error:(436, 135) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2node_modulesangular2srccorelinkercompiler.d.ts
Error:(12, 50) TS2304: Cannot find name 'Promise'.
Error:(16, 41) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2node_modulesangular2srccorelinkerdynamic_component_loader.d.ts
Error:(108, 136) TS2304: Cannot find name 'Promise'.
Error:(156, 150) TS2304: Cannot find name 'Promise'.
Error:(197, 128) TS2304: Cannot find name 'Promise'.
Error:(203, 127) TS2304: Cannot find name 'Promise'.
Error:(204, 141) TS2304: Cannot find name 'Promise'.
Error:(205, 119) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2node_modulesangular2srccorerenderapi.d.ts
Error:(13, 13) TS2304: Cannot find name 'Map'.
Error:(14, 84) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2node_modulesangular2srcfacadeasync.d.ts
Error:(27, 33) TS2304: Cannot find name 'Promise'.
Error:(28, 45) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2node_modulesangular2srcfacadecollection.d.ts
Error:(1, 25) TS2304: Cannot find name 'MapConstructor'.
Error:(2, 25) TS2304: Cannot find name 'SetConstructor'.
Error:(4, 27) TS2304: Cannot find name 'Map'.
Error:(4, 39) TS2304: Cannot find name 'Map'.
Error:(7, 9) TS2304: Cannot find name 'Map'.
Error:(8, 30) TS2304: Cannot find name 'Map'.
Error:(11, 43) TS2304: Cannot find name 'Map'.
Error:(12, 27) TS2304: Cannot find name 'Map'.
Error:(14, 23) TS2304: Cannot find name 'Map'.
Error:(15, 25) TS2304: Cannot find name 'Map'.
Error:(95, 41) TS2304: Cannot find name 'Set'.
Error:(96, 22) TS2304: Cannot find name 'Set'.
Error:(97, 25) TS2304: Cannot find name 'Set'.
C:UsersarmyTikDesktopangular2node_modulesangular2srcfacadelang.d.ts
Error:(13, 17) TS2304: Cannot find name 'Map'.
Error:(14, 17) TS2304: Cannot find name 'Set'.
Error:(78, 59) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2node_modulesangular2srcfacadepromise.d.ts
Error:(2, 14) TS2304: Cannot find name 'Promise'.
Error:(7, 32) TS2304: Cannot find name 'Promise'.
Error:(8, 38) TS2304: Cannot find name 'Promise'.
Error:(9, 35) TS2304: Cannot find name 'Promise'.
Error:(9, 93) TS2304: Cannot find name 'Promise'.
Error:(10, 34) TS2304: Cannot find name 'Promise'.
Error:(11, 32) TS2304: Cannot find name 'Promise'.
Error:(11, 149) TS2304: Cannot find name 'Promise'.
Error:(12, 43) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2node_modulesangular2srchttpheaders.d.ts
Error:(43, 59) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2node_modulesangular2srchttpurl_search_params.d.ts
Error:(11, 16) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2node_modulesangular2srcplatformbrowserbrowser_adapter.d.ts
Error:(75, 33) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2node_modulesangular2srcplatformdomdom_adapter.d.ts
Error:(85, 42) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2node_modulesrxjsCoreOperators.d.ts
Error:(35, 67) TS2304: Cannot find name 'Promise'.
Error:(50, 66) TS2304: Cannot find name 'Promise'.
Error:(89, 67) TS2304: Cannot find name 'Promise'.
Error:(94, 38) TS2304: Cannot find name 'Promise'.
Error:(94, 50) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2node_modulesrxjsObservable.d.ts
Error:(46, 62) TS2304: Cannot find name 'Promise'.
Error:(47, 42) TS2304: Cannot find name 'Iterator'.
Error:(103, 74) TS2304: Cannot find name 'Promise'.
Error:(103, 84) TS2304: Cannot find name 'Promise'.
Error:(143, 66) TS2304: Cannot find name 'Promise'.
Error:(158, 65) TS2304: Cannot find name 'Promise'.
Error:(201, 66) TS2304: Cannot find name 'Promise'.
Error:(206, 38) TS2304: Cannot find name 'Promise'.
Error:(206, 50) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2node_modulesrxjsobservableForkJoinObservable.d.ts
Error:(6, 50) TS2304: Cannot find name 'Promise'.
Error:(7, 58) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2node_modulesrxjsobservableFromObservable.d.ts
Error:(7, 38) TS2304: Cannot find name 'Promise'.
Error:(7, 51) TS2304: Cannot find name 'Iterator'.
C:UsersarmyTikDesktopangular2node_modulesrxjsobservablePromiseObservable.d.ts
Error:(9, 31) TS2304: Cannot find name 'Promise'.
Error:(10, 26) TS2304: Cannot find name 'Promise'.
19 ответов:
угловой 5 с машинописным текстом ^2.0.0
это должно также работать то же самое с более ранними версиями Angular 2+.
чтобы заставить это работать с typescript 2.0.0, я сделал следующее.
npm install --save-dev @types/core-jstsconfig.json
"compilerOptions": { "declaration": false, "emitDecoratorMetadata": true, "experimentalDecorators": true, "mapRoot": "./", "module": "es6", "moduleResolution": "node", "noEmitOnError": true, "noImplicitAny": false, "outDir": "../dist/out-tsc", "sourceMap": true, "target": "es5", "typeRoots": [ "../node_modules/@types" ], "types": [ "core-js" ] }подробнее о @types with typescript 2.0.0.
- https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/
- https://www.npmjs.com / ~типы
Установить Пример:
npm install --save-dev @types/core-jsповторяющиеся ошибки, идентификатор
это, скорее всего, потому, что дубликаты ECMAScript 6 typings уже импортируются откуда-то еще, скорее всего, старый es6-shim.
проверьте
typings.d.tsубедитесь, что нет ссылок наes6. Удалите любую ссылку наes6из вашего каталога typings, если он у вас есть.Например:
это будет конфликт с
types:['core-js']в typings.формат JSON.{ "globalDependencies": { "core-js": "registry:dt/core-js#0.0.0+20160602141332" // es6-shim will also conflict } }в том числе
core-jsв массиве типов вtsconfig.jsonдолжно быть единственным местом, откуда он импортируется.угловой CLI 1.0.0-бета.30
если вы используете Angular-CLI, удалите массив lib в
typings.json. Это, кажется, противоречит объявлению core-js в типах."compilerOptions" : { ... // removed "lib": ["es6", dom"], ... }, "types" : ["core-js"]пользователи Webstorm / Intellij, использующие Angular CLI
убедитесь, что встроенный компилятор typescript отключен. Это будет конфликтовать с CLI. Для компиляции вашего машинописного текста с помощью CLI вы можете настроить a
ng serveконфигурации.Tsconfig компилятора параметры Либ против типа
если вы предпочитаете не устанавливать определения типов core js, есть некоторые библиотеки es6, которые входят в состав typescript. Они используются через
lib: []свойство в tsconfig.смотрите здесь например:https://www.typescriptlang.org/docs/handbook/compiler-options.html
Примечание: Если --lib не указан, то вводится библиотека по умолчанию. Этот введенная библиотека по умолчанию: ► для -- цель ES5: DOM,ES5,ScriptHost ► Для --target ES6: DOM,ES6,DOM.Iterable, ScriptHost
tl; dr
короткий ответ
"lib": [ "es6", "dom" ]или"types": ["core-js"]может использоваться для разрешенияcan't find Promise,Map, Set and Iterator. Использование обоих, однако, приведет к дублированию ошибок идентификатора.
У меня также есть та же проблема--"обещание не найдено"--когда код хочет создать объект Promise.
пробовал некоторые решения, найденные на stackoverflow, в том числе тот, чтобы вынуть систему.конфигурация. {(.. }) для формирования системы.js и включить его в индекс.формат html.
наконец-то я решил проблему. Проблема в том, что в индексе.html, es6-shim.минута.js включен. Однако, в tsconfig.json, свойство " target "в разделе" compilerOptions "имеет значение"es5". После Того, Как Я изменил его на "es6", ошибка исчезла.
Угловой 2 Финал
- поддержка es5 (отлично работает с TS 2.0.0 +)
за обновление
es6-shimне поддерживается сейчас, если у вас установлены оба типа вместеes6-shim&core-jsвместе. Удалитьes6-shimввод с помощью упоминания в tsconfig.формат JSON. Теперь вы можете ссылаться нижеcore-jsпечати дляes5поддержка внутриmain.ts///<reference path="./../typings/globals/core-js/index.d.ts"/>tsconfig.json
exclude: [ "node_modules", //<-- this would be needed in case of VS2015 "node_modules/@typings", "typings" ]- es6 перейти
вам просто нужно установить
"target"свойствоes6, то все ошибки уйдут. И транспилированный код будет в .
обновлено по состоянию на angular-2.0.0-rc.4
TLDR;
транспилировать в es6
- ошибка уходит (без каких-то подводных камней).
транспилировать в es5
- установить typings
- установите прокладку es6
- убедитесь, что он компилируется с вашим кодом.
- ошибка выходит прочь.
для читателей:
Вариант 1: транспилировать в es6 или es2015
tsconfig.json:
{ "compilerOptions": { "target": "es6", "module": "system", "moduleResolution": "node", ... }, "exclude": [ "node_modules", "jspm_packages" ] }имейте в виду uglifyjs не поддерживает es6 на данный момент. Это может повлиять на создание производственных пакетов.
Вариант 2: Транспилируйте в es5, установите typings, а затем установите es6-shim:
tsconfig.json:
{ "compilerOptions": { "target": "es5", "module": "system", "moduleResolution": "node", ... }, "exclude": [ "node_modules", "jspm_packages" ] }установить типизации, а затем установить es6-shim:
npm install typings --saveDev typings install dt~es6-shim --global --saveесли вы идете по этому маршруту, вам нужно убедиться, что компилятор typescript может найти .д.файл ТС.
у вас есть два варианта:
а. Убедитесь, что ваш tsconfig.json находится на том же уровне, что и папка typings.
b. включите ссылку в свой основной.ts-файл, в котором загружается приложение angular2.
вариант A: убедитесь, что ваш tsconfig.json находится на том же уровне, что и типирование папка.
Примечание: не используйте флаг exclude для исключения папки typings.
project |-- src |-- node_modules |-- package.json |-- typings |-- tsconfig.jsonвариант B: ссылка в главном файле перед загрузкой (не делайте этого):
как показано в других ответах, этот файл больше не входит в Angular
главная.ТС:
/// <reference path="../../typings/globals/es6-shim/index.d.ts" />
это то, что сработало для меня.
проверьте, существует ли
typings.json,это выглядит примерно так,
{ "globalDependencies": { "core-js": "registry:dt/core-js#0.0.0+20160317120654", "jasmine": "registry:dt/jasmine#2.2.0+20160505161446", "node": "registry:dt/node#6.0.0+20160613154055" } }установите пакет typings глобально.
sudo npm install -g typingsпосле установки typings, используя
typings installперезагрузите сервер.
при наличии Typescript >= 2 опция " lib " в tsconfig.json сделает эту работу. Нет необходимости в наборах. https://www.typescriptlang.org/docs/handbook/compiler-options.html
{ "compilerOptions": { "target": "es5", "lib": ["es2016", "dom"] //or es6 instead of es2016(es7) } }
У меня была аналогичная проблема, когда он не узнавал обещание.resolve () метод. Я изменился "целевой" значение от ES5 до ES6 на tsconfig.json. Это решило проблему.
надеюсь, что это помогает.
Так как Angular 2 перешел в RC 0, /angular2/typings/browser.d.ts больше не является частью углового распределения 2. Файл может быть установлен отдельно.
отсюда: https://github.com/angular/angular/issues/8513 есть несколько вариантов. Тот, который работал на меня был:
typings install es6-shim --ambient --save // In your app.ts /// <reference path="typings/browser.d.ts" />
при использовании Angular2 RC1 с наборами v1. 0+ используйте команду:
typings install dt~core-js --save --globalчтобы установить определение core-js, а затем ссылаться на свой глобальный индекс в главном.ТС:
/// <reference path="../../../typings/index.d.ts" />Если вы используете es6-shim или какую-либо другую библиотеку shim, установите для этого вместо
мне удалось исправить эту проблему без необходимости добавлять какую-либо ссылку на тройную косую черту в файл начальной загрузки TS, изменить на ES6 (что приносит кучу проблем, так же как @DatBoi сказал) обновление VS2015 в
NodeJSи/илиNPMкомплектные сборки или установкаtypingsво всем мире.вот что я сделал в несколько шагов:
- добавил
typingsв рамках проекта .- добавил
scriptблокpackage.jsonфайл для выполнения / обновленияtypingsпосле каждого действия НПМ.- добавил
typings.jsonфайл в корневой папке проекта, содержащий ссылку наcore-js, который является одним из лучших пакетов shim/polyfill там на данный момент, чтобы исправить проблемы ES5/ES6.вот как
package.jsonфайл должен выглядеть так (только соответствующие строки):{ "version": "1.0.0", "name": "YourProject", "private": true, "dependencies": { ... "typings": "^1.3.2", ... }, "devDependencies": { ... }, "scripts": { "postinstall": "typings install" } }и вот это
typings.jsonfile:{ "globalDependencies": { "core-js": "registry:dt/core-js#0.0.0+20160602141332", "jasmine": "registry:dt/jasmine#2.2.0+20160621224255", "node": "registry:dt/node#6.0.0+20160621231320" } }(
JasmineиNodeне требуются, но я предлагаю держать их в случае, если вам нужно будет в будущем).это исправление отлично работает с Angular2 RC1 до RC4, что мне и нужно, но я думаю, что он также исправит подобные проблемы с другими пакетами библиотек с поддержкой ES6.
AFAIK, я думаю, что это самый чистый способ исправить его, не испортив настройки по умолчанию VS2015.
для получения дополнительной информации и детального анализа этого вопроса, я также предлагаю читать этот пост.
У меня была такая же проблема при создании объекта promise внутри моего класса. Изменив имя цели на " es5 "с" es6", я решил свою проблему.
еще одним возможным решением является переустановка типов:
Это работает для меня"angular2": "2.0.0-beta.15"
npm clean cachenpm installnpm install -g typings- удалить
typingsкаталог из проекта (каталог wwhere typings модули установлены)typings installnpm run
еще одно хорошее решение. Вам нужно создать файл типизации.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+20160909174046" } }затем установите глобальный или локальный пакет типов, если он не установлен (я устанавливаю его глобально):
sudo npm install --global typingsв корневом каталоге проекта выполните команду:
typings installпосле того, как эта проблема будет решена. Не требуется менять цель tsconfig на es6 или es7. Ваше веб-приложение не поддерживает после этого некоторые старые версии браузеров.
Я нашел ссылку в boot.ts не был правильным путем. Обновление этого пути до
/// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" />устранены ошибки обещай.
Я тренируюсь с учебником angular2 (hero).
после установки @types / core-js, прокомментированных в ответах на тезисы, я получил ошибку "дубликат идентификатора".
в моем случае это было решено как удаление строки lib в tsconfig.формат JSON.// "lib": ["es2015", "dom"]
Если вы пришли сюда, потому что видите эти ошибки в Visual Studio 2017, то у вас есть другая проблема, как указано выше, если вам удастся выполнить компиляцию. Это связано с тем, что языковая служба не выбирает ваш tsconfig.формат JSON.
вы должны установить действие сборки вашего tsconfig.json в "содержимое" (щелкните правой кнопкой мыши - > Свойства), затем VS возьму его в руки.
Я заметил, что эти проблемы появляются после обновления с углового 5 до углового 6. Я смог исправить это, выполнив следующие действия в VS2017:
- убедитесь, что TypeScript SDK был установлен (через установщик Visual Studio) для моей конкретной версии TypeScript, 2.9
- убедитесь, что свойство системного проекта модуля установлено в соответствии с этим в моем tsconfig.json: ES2015. Это часто автоматически синхронизируется, если файл tsconfig находится в корне проекта. Однако, поскольку я использовал шаблон VS Angular, он помещает эти файлы в подпапку" ClientApp", а свойство системного проекта модуля не было установлено.
tsconfig.json:
{ "compileOnSave": false, "compilerOptions": { "outDir": "./dist/out-tsc", "sourceMap": true, "declaration": false, "moduleResolution": "node", "emitDecoratorMetadata": true, "experimentalDecorators": true, "target": "es5", "lib": [ "es2017", "dom" ], "module": "es2015", "baseUrl": "./" } }
моя файловая структура выглядит следующим образом:
project |--node-modules | |--angular2 | | |--typings | | | |--browser.d.ts |--src |--app.tsвставить ниже в верхней части вашего приложения.Ц и ваша проблема решена
/// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" />
я получил тот же вопрос, и в состоянии найти его в github https://github.com/angular/angular-cli/issues/1901, в котором говорится, что это была проблема с
[email protected].понизить typescript до
2.0.0как глобально, так и локально помогли мне решить эту проблему.глобально:
npm uninstall typescript -g npm cache clean npm install [email protected] -gлокально: перейдите в папку проекта, созданную ng new
npm uninstall typescript npm cache clean npm install [email protected]Я также изменил версию typescript в пакете.json от
^2.0.0to2.0.0, но это не сработало, пока я не понизил локальную установку typescript.


Comments