Угловой: не удается найти обещание, карту, набор и итератор



после установки 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'.
670   19  

19 ответов:

угловой 5 с машинописным текстом ^2.0.0

это должно также работать то же самое с более ранними версиями Angular 2+.

чтобы заставить это работать с typescript 2.0.0, я сделал следующее.

npm install --save-dev @types/core-js

tsconfig.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.

  1. https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/
  2. 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 конфигурации.

enter image description here

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;

  1. транспилировать в es6

    • ошибка уходит (без каких-то подводных камней).
  2. транспилировать в 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, установите для этого вместо

см.https://github.com/typings/typings/issues/517

мне удалось исправить эту проблему без необходимости добавлять какую-либо ссылку на тройную косую черту в файл начальной загрузки 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.json file:

{
  "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"

  1. npm clean cache
  2. npm install
  3. npm install -g typings
  4. удалить typings каталог из проекта (каталог wwhere typings модули установлены)
  5. typings install
  6. npm 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.

https://developercommunity.visualstudio.com/content/problem/208941/vs-156-ignores-tsconfigjson-and-typescriptcompileb.html

вы должны установить действие сборки вашего tsconfig.json в "содержимое" (щелкните правой кнопкой мыши - > Свойства), затем VS возьму его в руки.

Я заметил, что эти проблемы появляются после обновления с углового 5 до углового 6. Я смог исправить это, выполнив следующие действия в VS2017:

  • убедитесь, что TypeScript SDK был установлен (через установщик Visual Studio) для моей конкретной версии TypeScript, 2.9
  • убедитесь, что свойство системного проекта модуля установлено в соответствии с этим в моем tsconfig.json: ES2015. Это часто автоматически синхронизируется, если файл tsconfig находится в корне проекта. Однако, поскольку я использовал шаблон VS Angular, он помещает эти файлы в подпапку" ClientApp", а свойство системного проекта модуля не было установлено.

VS2017 Project Properties

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.0 to 2.0.0, но это не сработало, пока я не понизил локальную установку typescript.

Comments

    Ничего не найдено.