Jestem kompletnym początkującym w Typescript i zastanawiam się, czy możliwe jest użycie obietnic ES6 w Typescript i co musiałbym zrobić, aby działały. Używam węzła 0.11.14 i podczas kompilacji pojawia się błąd „Nie można znaleźć nazwy„ Obietnica ””
javascript
typescript
es6-promise
dchang
źródło
źródło
es6-promise
Odpowiedzi:
Obecny lib.d.ts nie ma zdefiniowanych obietnic, więc potrzebujesz do tego dodatkowego pliku definicji, dlatego otrzymujesz błędy kompilacji.
Możesz na przykład użyć (jak mówi @elclanrs) użyć pakietu es6-promise z plikiem definicji z DefinitelyTyped: definicja es6-promise
Następnie możesz go użyć w następujący sposób:
edytuj Możesz go używać bez definicji podczas kierowania na ES6 (za pomocą kompilatora TypeScript) - Pamiętaj, że nadal potrzebujesz, aby Promise istniała w czasie wykonywania (więc nie będzie działać w starych przeglądarkach :)) Dodaj / Edytuj następujące
tsconfig.json
:edit 2 Kiedy pojawi się TypeScript 2.0, sytuacja trochę się zmieni (choć powyżej nadal działa), ale pliki definicji można zainstalować bezpośrednio za pomocą npm, jak poniżej:
npm install --save @types/es6-promise
- źródłoedit3 Aktualizacja odpowiedzi o więcej informacji o używaniu typów.
Utwórz
package.json
plik tylko{ }
z zawartością (jeśli nie masz jeszcze pliku package.json. Wywołajnpm install --save @types/es6-promise
itsc --init
. Pierwsze polecenie instalacji npm zmieni twoje,package.json
aby uwzględnić es6-promise jako zależność. Tsc --init utworzytsconfig.json
plik dla Ciebie.Możesz teraz użyć obietnicy w swoim pliku maszynopisu
var x: Promise<any>;
. Wykonaj,tsc -p .
aby skompilować swój projekt. Nie powinieneś mieć żadnych błędów.źródło
--save-dev
zamiast flagi należy użyć flagi--save
, ponieważ biblioteka jest używana tylko w czasie kompilacji.Alternatywa nr 1
Użyj opcji kompilatora
target
i,lib
aby skompilować bezpośrednio does5
bez konieczności instalowaniaes6-shim
. (Testowane za pomocą TypeScript2.1.4
). W sekcji lib użyjes2016
lubes2015.promise
.Alternatywa nr 2
Użyj NPM, aby zainstalować organizację
es6-shim
z typów .Alternatywa nr 3
Przed TypeScript 2.0 użyj typów, aby zainstalować
es6-shim
globalnie z DefinitelyTyped .Ta
typings
opcja używanpm
do instalacjitypings
globalnej, a następnie używatypings
do zainstalowania podkładki.dt~
Prefiks oznacza ściągnąć podkładkę z DefinitelyTyped. Ta--global
opcja oznacza, że typy podkładek będą dostępne w całym projekcie.Zobacz też
https://github.com/Microsoft/TypeScript/issues/7788 - Nie można znaleźć nazwy „Obietnica” i nie można znaleźć nazwy „Wymagaj”
źródło
es2016
nie jest dobrym pomysłem, chyba że twój cel obsługuje ES2016. Jest wiele przeglądarek, które obsługują obietnice, ale nie wszystkie w ES2016. Służyes2015.promise
do włączania tylko typów obietnic bez pobierania typów dla wszystkiego w ES2016.Począwszy od TypeScript 2.0, możesz uwzględnić typy dla natywnych obietnic, dołączając następujące elementy do pliku
tsconfig.json
Obejmuje to deklaracje obietnicy, które są dostarczane z TypeScript bez konieczności ustawiania celu na ES6.
źródło
Jeśli używasz node.js 0.12 lub nowszego / typescript 1.4 lub nowszego, po prostu dodaj opcje kompilatora, takie jak:
Więcej informacji: https://github.com/Microsoft/TypeScript/wiki/Compiler-Options
Jeśli używasz
tsconfig.json
, to w ten sposób:Więcej informacji: https://github.com/Microsoft/TypeScript/wiki/tsconfig.json
źródło
To najnowszy sposób, aby to zrobić, powyższa odpowiedź jest nieaktualna:
typings install --global es6-promise
źródło
Używanie natywnych obietnic ES6 z typescriptem w programie Visual Studio 2015 + narzędzia Node.js 1.2
Nie jest wymagana instalacja npm, ponieważ ES6 Promises jest natywna.
Projekt Node.js -> Właściwości -> karta Budowanie skryptu Typescript Wersja ECMAScript = ECMAScript6
źródło
A. Jeśli używasz
"target": "es5"
i wersji TypeScript poniżej 2.0:B. Jeśli używasz
"target": "es5"
i TypeScript w wersji 2.0 lub nowszej:C. Jeśli używasz
"target": "es6"
, nie musisz nic robić.źródło
"target": "es6"
z TypeScript 2.1.1 i nadal otrzymujęCannot find name 'Promise'
.Musiałem obniżyć wersję
@types/core-js
do 9.36, aby działał z"target": "es5"
zestawem w moim tsconfig."@types/core-js": "0.9.36",
źródło