Depois de instalar Angular, o compilador manter Typescript recebendo alguns erros em não encontrar Promise
, Map
, Set
e Iterator
.
Até agora eu os ignorei, mas agora preciso Promise
para que meu código funcione.
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
Os erros:
................ERROS OF MY CODE.................
C:\Users\armyTik\Desktop\angular2\greeting_cmp.ts
Error:(7, 20) TS2304: Cannot find name 'Promise'.
Error:(7, 42) TS2304: Cannot find name 'Promise'.
.........................................
C:\Users\armyTik\Desktop\angular2\node_modules\angular2\platform\browser.d.ts
Error:(77, 90) TS2304: Cannot find name 'Promise'.
C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\application_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:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\change_detection\parser\locals.d.ts
Error:(3, 14) TS2304: Cannot find name 'Map'.
Error:(4, 42) TS2304: Cannot find name 'Map'.
C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\debug\debug_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:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\di\provider.d.ts
Error:(436, 103) TS2304: Cannot find name 'Map'.
Error:(436, 135) TS2304: Cannot find name 'Map'.
C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\linker\compiler.d.ts
Error:(12, 50) TS2304: Cannot find name 'Promise'.
Error:(16, 41) TS2304: Cannot find name 'Promise'.
C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\linker\dynamic_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:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\render\api.d.ts
Error:(13, 13) TS2304: Cannot find name 'Map'.
Error:(14, 84) TS2304: Cannot find name 'Map'.
C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\facade\async.d.ts
Error:(27, 33) TS2304: Cannot find name 'Promise'.
Error:(28, 45) TS2304: Cannot find name 'Promise'.
C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\facade\collection.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:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\facade\lang.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:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\facade\promise.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:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\http\headers.d.ts
Error:(43, 59) TS2304: Cannot find name 'Map'.
C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\http\url_search_params.d.ts
Error:(11, 16) TS2304: Cannot find name 'Map'.
C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\platform\browser\browser_adapter.d.ts
Error:(75, 33) TS2304: Cannot find name 'Map'.
C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\platform\dom\dom_adapter.d.ts
Error:(85, 42) TS2304: Cannot find name 'Map'.
C:\Users\armyTik\Desktop\angular2\node_modules\rxjs\CoreOperators.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:\Users\armyTik\Desktop\angular2\node_modules\rxjs\Observable.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:\Users\armyTik\Desktop\angular2\node_modules\rxjs\observable\ForkJoinObservable.d.ts
Error:(6, 50) TS2304: Cannot find name 'Promise'.
Error:(7, 58) TS2304: Cannot find name 'Promise'.
C:\Users\armyTik\Desktop\angular2\node_modules\rxjs\observable\FromObservable.d.ts
Error:(7, 38) TS2304: Cannot find name 'Promise'.
Error:(7, 51) TS2304: Cannot find name 'Iterator'.
C:\Users\armyTik\Desktop\angular2\node_modules\rxjs\observable\PromiseObservable.d.ts
Error:(9, 31) TS2304: Cannot find name 'Promise'.
Error:(10, 26) TS2304: Cannot find name 'Promise'.
javascript
angular
typescript
Stav Alfi
fonte
fonte
Respostas:
Angular 5 com texto datilografado ^ 2.0.0
Isso também deve funcionar da mesma maneira nas versões anteriores do Angular 2+.
Para que isso funcione com o texto datilografado 2.0.0, fiz o seguinte.
npm install --save-dev @types/core-js
tsconfig.json
Mais sobre @types com texto datilografado 2.0.0.
Exemplo de instalação:
Erros de identificador duplicado
Isso é mais provável porque as digitações ecmascript duplicadas 6 já estão sendo importadas de algum outro lugar, provavelmente um antigo es6-shim.
Verifique
typings.d.ts
novamente se não há referências aes6
. Remova qualquer referênciaes6
do seu diretório de digitações, se você tiver uma.Por exemplo:
Isso entrará em conflito com
types:['core-js']
em typings.json.Incluindo
core-js
na matriz de tipos emtsconfig.json
deve ser o único local de onde é importada.CLI angular 1.0.0-beta.30
Se você estiver usando o Angular-CLI, remova a matriz lib no
typings.json
. Isso parece entrar em conflito com a declaração de core-js nos tipos.Usuários Webstorm / Intellij usando a CLI Angular
Verifique se o compilador datilografado interno está desabilitado. Isso entrará em conflito com a CLI. Para compilar seu texto datilografado com a CLI, você pode definir uma
ng serve
configuração.Tsconfig compilerOptions lib vs types
Se você preferir não instalar as definições principais do tipo js, existem algumas bibliotecas es6 incluídas no typescript. Esses são usados através da
lib: []
propriedade em tsconfig.Veja aqui por exemplo: https://www.typescriptlang.org/docs/handbook/compiler-options.html
tl; dr
Resposta curta
"lib": [ "es6", "dom" ]
ou"types": ["core-js"]
pode ser usada para resolvercan't find Promise,Map, Set and Iterator
. O uso de ambos causará erros de identificador duplicados.fonte
Eu também tenho o mesmo problema - "Promise não encontrado" - quando o código deseja criar um objeto Promise.
Tentei alguma solução encontrada no stackoverflow, incluindo a solução para remover System.config ({...}) para formar system.js e incluí-la no index.html.
Finalmente eu resolvi o problema. O problema é que, em index.html, es6-shim.min.js está incluído. No entanto, em tsconfig.json, a propriedade "target" em "compilerOptions" possui o valor de "es5". Depois que eu mudei para "es6", o erro desapareceu.
fonte
Angular 2 Final
- suporte es5 (funciona perfeitamente com o TS 2.0.0 +)
Por atualização
es6-shim
não é suportada agora, se você tiver as duas tipografias instaladas juntases6-shim
ecore-js
juntas. Remova aes6-shim
digitação mencionando em tsconfig.json. Agora você pode consultar abaixocore-js
digitando para obteres5
suporte dentromain.ts
tsconfig.json
- es6 suppport
Você só precisa definir a
"target"
propriedade comoes6
, então tudo irá desaparecer. E o código transpilado estará emes6
formato.fonte
2.0.0-rc.1
. Eu comecei a usar o Angular apenas alguns dias atrás. Trabalhei nos documentos de introdução [aqui] (). Nopackage.json
que colocar"angular2-in-memory-web-api": "0.0.7"
eo resto das coisas angular vem de"@angular/<module>": "2.0.0-rc.1"
onde<module>
écommon
,compiler
,core
,http
,platform-browser
,platform-browser-dynamic
,router
,router-deprecated
eupgrade
.Atualizado a partir do angular-2.0.0-rc.4
TLDR;
Transpilar para es6
Transpilar para es5
Para os leitores:
Opção 1: Transpilar para es6 ou es2015
tsconfig.json:
Lembre-se de que o uglifyjs não suporta es6 no momento . Isso pode afetar a criação de pacotes de produção.
Opção 2: transpile para o es5, instale as tipagens e instale o es6-shim:
tsconfig.json:
Instale as tipagens e instale o es6-shim:
Se você seguir esta rota, precisará garantir que o compilador de texto datilografado possa encontrar o arquivo .d.ts.
Você tem duas opções:
uma. Verifique se o seu tsconfig.json está no mesmo nível da pasta de digitações.
b. Inclua uma referência no seu arquivo main.ts onde seu aplicativo angular2 é inicializado.
Opção A: Verifique se o seu tsconfig.json está no mesmo nível da pasta de digitações.
Nota: NÃO use o sinalizador de exclusão para excluir a pasta de digitações.
Opção B: Referência no arquivo principal antes da inicialização (não faça isso):
Conforme mostrado em outras respostas, esse arquivo não é mais incluído pelo Angular
main.ts:
fonte
--saveDev
não funciona por enquanto.--save-dev
faz.typings
ser instalado globalmente?Ao ter o Typecript> = 2, a opção "lib" no tsconfig.json fará o trabalho. Não há necessidade de digitações. https://www.typescriptlang.org/docs/handbook/compiler-options.html
fonte
Isto é o que funcionou para mim.
verifique se existe um
typings.json
arquivo,Instale o pacote de digitações globalmente.
depois de instalar as digitações , execute
depois reinicie o servidor.
fonte
Eu tive um problema semelhante em que não estava reconhecendo o método Promise.resolve () . Eu mudei "alvo" valor de ES5 para ES6 em tsconfig.json . Isso resolveu o problema.
Espero que isto ajude.
fonte
Como o Angular 2 foi para RC 0, /angular2/typings/browser.d.ts não faz mais parte da distribuição do Angular 2. O arquivo pode ser instalado separadamente.
A partir daqui: https://github.com/angular/angular/issues/8513, existem algumas opções. O que funcionou para mim foi:
fonte
Eu consegui corrigir esse problema sem precisar adicionar nenhuma referência de barra tripla ao arquivo de inicialização TS, alterar para o ES6 (que traz vários problemas, como disse o @DatBoi ) atualizar o VS2015
NodeJS
e / ou compilarNPM
compilações ou instalartypings
globalmente.Aqui está o que eu fiz em algumas etapas:
typings
nopackage.json
arquivo .script
bloco nopackage.json
arquivo para executar / atualizartypings
após cada ação do NPM.typings.json
arquivo na pasta raiz do projeto contendo uma referência acore-js
, que é um dos melhores pacotes shim / polyfill existentes no momento para corrigir problemas do ES5 / ES6.Veja como o
package.json
arquivo deve ficar (apenas linhas relevantes):E aqui está o
typings.json
arquivo:(
Jasmine
eNode
não são obrigatórios, mas sugiro mantê-los caso seja necessário no futuro).Essa correção está funcionando bem com o Angular2 RC1 a RC4, que é o que eu precisava, mas acho que também corrigirá problemas semelhantes com outros pacotes de bibliotecas habilitados para ES6.
AFAIK, acho que essa é a maneira mais limpa possível de corrigi-la sem alterar as configurações padrão do VS2015.
Para mais informações e uma análise detalhada do problema, sugiro também que leia este post no meu blog.
fonte
Se estiver usando o Angular2 RC1 com as digitações v1.0 +, use o comando:
para instalar a definição core-js e referenciar seu índice global em seu main.ts:
Se estiver usando es6-shim ou alguma outra biblioteca de shim, instale as tipagens para isso.
Consulte https://github.com/typings/typings/issues/517
fonte
Percebi esses problemas aparecendo após a atualização do Angular 5 para o Angular 6. Consegui corrigir isso fazendo o seguinte no VS2017:
tsconfig.json:
fonte
Eu tive um mesmo problema ao criar um objeto de promessa dentro da minha classe. A alteração do nome do destino para "es5" de "es6" resolveu meu problema.
fonte
Outra solução possível é reinstalar as tipagens:
Isso funciona para mim para
"angular2": "2.0.0-beta.15"
npm clean cache
npm install
npm install -g typings
typings
diretório do projeto (os módulos de tipografia Directory wwhere estão instalados)typings install
npm run
fonte
Outra boa solução. Você precisa criar um arquivo typings.json no diretório raiz do projeto com o conteúdo:
Em seguida, instale o pacote de digitação global ou local, se não estiver instalado (eu sou o global):
No diretório raiz do projeto, execute o comando:
Depois que esse problema for resolvido. Não é necessário alterar o destino tsconfig para es6 ou es7. Seu aplicativo da web não suporta depois disso uma versão antiga dos navegadores.
fonte
Se você veio aqui porque vê esses erros no Visual Studio 2017, tem um problema diferente como acima, se conseguir compilar. Isso ocorre porque o serviço de idioma não escolhe seu tsconfig.json.
https://developercommunity.visualstudio.com/content/problem/208941/vs-156-ignores-tsconfigjson-and-typescriptcompileb.html
Você deve definir a Ação de compilação do seu tsconfig.json como "Conteúdo" (clique com o botão direito do mouse -> Propriedades), para que o VS a escolha.
fonte
Eu encontrei a referência no boot.ts não era o caminho correto. Atualizando esse caminho para
/// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" />
os erros do Promise.fonte
Estou treinando com um tutorial angular2 (herói).
Após instalar @ types / core-js comentado nas respostas, recebi o erro "Identificador duplicado".
No meu caso, foi resolvido como remover a linha da lib no tsconfig.json.
fonte
minha estrutura de arquivos é a seguinte:
cole o abaixo na parte superior do seu app.ts e seu problema foi resolvido
fonte
Eu peguei o mesmo problema e consegui encontrá-lo no github https://github.com/angular/angular-cli/issues/1901 , que afirmava que era um problema
[email protected]
.O downgrade de texto datilografado para
2.0.0
global e localmente me ajudou a resolvê-lo.Globalmente:
Localmente: acesse a pasta do projeto criada por ng novo
Também alterei a versão do typescript dentro do package.json de
^2.0.0
para2.0.0
, mas não funcionou até fazer o downgrade da instalação do typescript local.fonte