Eu sou um iniciante completo no Typescript e estou pensando se é possível usar as promessas do ES6 no Typescript e o que eu teria que fazer para fazê-las funcionar. Estou executando o nó 0.11.14 e estou recebendo um erro durante a compilação "Não foi possível encontrar o nome 'Promise'"
javascript
typescript
es6-promise
dchang
fonte
fonte
es6-promise
Respostas:
O lib.d.ts atual não possui promessas definidas, portanto você precisa de um arquivo de definição extra, por isso está recebendo erros de compilação.
Você pode, por exemplo, usar (como @elclanrs diz) usar o pacote es6-promessa com o arquivo de definição de DefinitelyTyped: definição de es6-promessa
Você pode usá-lo assim:
editar Você pode usá-lo sem uma definição ao direcionar o ES6 (com o compilador TypeScript) - Observe que você ainda precisa que o Promise exista no tempo de execução (portanto, ele não funcionará em navegadores antigos :)) Adicione / edite o seguinte ao seu
tsconfig.json
:edit 2 Quando o TypeScript 2.0 for lançado, as coisas mudarão um pouco (embora acima ainda funcione), mas os arquivos de definição podem ser instalados diretamente com o npm, como abaixo:
npm install --save @types/es6-promise
- fonteedit3 Atualizando resposta com mais informações para usar os tipos.
Crie um
package.json
arquivo apenas{ }
com o conteúdo (se você ainda não possui o package.json. Liguenpm install --save @types/es6-promise
etsc --init
. O primeiro comando npm install alterará seupackage.json
para incluir a es6-promessa como uma dependência. Tsc --init criará umtsconfig.json
arquivo para voce.Agora você pode usar a promessa no seu arquivo datilografado
var x: Promise<any>;
. Executetsc -p .
para compilar seu projeto. Você não deve ter erros.fonte
--save-dev
deve ser usado em vez de--save
, como a biblioteca é usada apenas em tempo de compilação.Alternativa # 1
Use as opções
target
e dolib
compilador para compilar diretamentees5
sem precisar instalar oes6-shim
. (Testado com TypeScript2.1.4
). Na seção lib, usees2016
oues2015.promise
.Alternativa # 2
Use o NPM para instalar a
es6-shim
partir da organização de tipos .Alternativa # 3
Antes do TypeScript 2.0, use as tipografias para instalar
es6-shim
globalmente o DefinitelyTyped .A
typings
opção usanpm
para instalartypings
globalmente e depois usatypings
para instalar o shim. Odt~
prefixo significa baixar o shim de DefinitelyTyped. A--global
opção significa que os tipos de calços estarão disponíveis durante todo o projeto.Veja também
https://github.com/Microsoft/TypeScript/issues/7788 - Não é possível encontrar o nome 'Promise' e não é possível encontrar o nome 'require'
fonte
es2016
não é uma boa ideia, a menos que seu destino ofereça suporte ao ES2016. Existem muitos navegadores que oferecem suporte a promessas, mas nem tudo no ES2016. Usees2015.promise
para incluir apenas os tipos de promessas sem puxar tipos para tudo no ES2016.A partir do TypeScript 2.0, você pode incluir digitações para promessas nativas, incluindo o seguinte no seu
tsconfig.json
Isso incluirá as declarações de promessa que acompanham o TypeScript sem precisar definir o destino como ES6.
fonte
Se você usar o node.js 0.12 ou superior / typescript 1.4 ou superior, basta adicionar opções do compilador como:
Mais informações: https://github.com/Microsoft/TypeScript/wiki/Compiler-Options
Se você usar
tsconfig.json
, faça o seguinte:Mais informações: https://github.com/Microsoft/TypeScript/wiki/tsconfig.json
fonte
Essa é a maneira mais recente de fazer isso, a resposta acima está desatualizada:
typings install --global es6-promise
fonte
Usando o ES6 Promises nativo com o Typecript nas ferramentas do Visual Studio 2015 + Node.js. 1.2
Nenhuma instalação npm necessária, pois o ES6 Promises é nativo.
Projeto Node.js -> Propriedades -> guia Compilação de Texto Escrito ECMAScript version = ECMAScript6
fonte
A. Se estiver usando
"target": "es5"
uma versão TypeScript abaixo de 2.0:B. Se estiver usando o
"target": "es5"
TypeScript versão 2.0 ou higer:C. Se estiver usando
"target": "es6"
, não há necessidade de fazer nada.fonte
"target": "es6"
TypeScript 2.1.1 e ainda estou conseguindoCannot find name 'Promise'
.Eu tive que fazer o downgrade
@types/core-js
para 9.36 para fazê-lo funcionar"target": "es5"
no meu tsconfig."@types/core-js": "0.9.36",
fonte