Typ escript: error TS2693: "Promise" se réfère seulement à un type, mais est utilisé comme une valeur ici
j'essaie d'utiliser le script pour mon AWS Lambda et j'obtiens les erreurs suivantes où que j'utilise des promesses.
error TS2693: 'Promise' only refers to a type, but is being used as a value here.
j'ai essayé d'utiliser les variations suivantes dans le code
à l'Aide de la Promesse du constructeur
responsePromise = new Promise((resolve, reject) => {
return reject(new Error(`missing is needed data`))
})
avec promesse.rejet
responsePromise = Promise.reject(new Error(`Unsupported method "${request.httpMethod}"`));
Versions
Voici les versions de mes dépendances dev:
"typescript": "^2.2.2"
"@types/aws-lambda": "0.0.9",
"@types/core-js": "^0.9.40",
"@types/node": "^7.0.12",
contenu de tsconfig.json
{
"compileOnSave": true,
"compilerOptions": {
"module": "commonjs",
// "typeRoots" : ["./typings", "./node_modules/@types"],
"target": "es5",
// "types" : [ "core-js" ],
"noImplicitAny": true,
"strictNullChecks": true,
"allowJs": true,
"noEmit": true,
"alwaysStrict": true,
"preserveConstEnums": true,
"sourceMap": true,
"outDir": "dist",
"moduleResolution": "Node",
"declaration": true,
"lib": [
"es6"
]
},
"include": [
"index.ts",
"lib/**/*.ts"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
j'utilise grunt-ts avec la configuration suivante pour exécuter la tâche ts.
ts: {
app: {
tsconfig: {
tsconfig: "./tsconfig.json",
ignoreSettings: true
}
},
...
j'ai essayé avec la solution mentionnée dans j'obtiens: [ts] 'promesse' se réfère seulement à un type, mais est utilisé comme une valeur ici mais pas de chance.
19 réponses
j'ai eu le même problème avec le aws-sdk
et je l'ai résolu en utilisant "target": "es2015"
. C'est mon fichier tsconfig.json
.
{
"compilerOptions": {
"outDir": "./dist/",
"sourceMap": false,
"noImplicitAny": false,
"module": "commonjs",
"target": "es2015"
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
Rencontre la même erreur aujourd'hui et résolu:
npm i --save-dev @types/es6-promise
mise à jour:
ajouter:
import {Promise} from 'es6-promise'
j'ai résolu cela en ajoutant ci-dessous le code à tsconfig.fichier json.
"lib": [
"ES5",
"ES2015",
"DOM",
"ScriptHost"]
Résolu en changeant la cible dans compilerOptions.
{
"compilerOptions": {
"module": "es2015",
"target": "es2015",
"lib": [
"es2016",
"dom"
],
"moduleResolution": "node",
"noImplicitAny": false,
"sourceMap": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"outDir": "./public/js/app"
},
"exclude": [
"node_modules",
"public/js",
"assets/app/polyfills.ts"
],
"angularCompilerOptions": {
"skipMetadataEmit": true
}
}
ajouter la ligne suivante au fichier où l'erreur est lancée.Cela devrait résoudre le problème
declare var Promise: any;
Voici mon conseil. Testé avec le vscode 1.21.1 (sur MAC)
Mettre en dessous de config pour tsconfig.json
"lib": [
"es2016",
"dom"
]
en compilerOptions
redémarrer IDE (cette action est requise: D )
finalement tsc a commencé à fonctionner sans aucune erreur. Mais de multiples changements. Merci à Sandro Keil , Pointy & unional
- enlevé ~ aws-lambda
- options supprimées comme noEmit, déclaration
- Modifié Gruntfile et supprimé ignoreSettings
tsconfig.json
{
"compileOnSave": true,
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"noImplicitAny": false,
"strictNullChecks": true,
"alwaysStrict": true,
"preserveConstEnums": true,
"sourceMap": false,
"moduleResolution": "Node",
"lib": [
"dom",
"es2015",
"es5",
"es6"
]
},
"include": [
"*",
"src/**/*"
],
"exclude": [
"./node_modules"
]
}
Gruntfile.js
ts: {
app: {
tsconfig: {
tsconfig: "./tsconfig.json"
}
},
...
avait le même problème avec le dactylographe et le aws-sdk
. La solution était de changer la cible à es6
.
Ma tsconfig.json
fichier:
{
compilerOptions: {
outDir: ./dist/,
sourceMap: true,
noImplicitAny: true,
module: commonjs,
target: es6,
jsx: react,
allowJs: true
},
include: [
./src/**/*
]
}
j'ai eu le même problème et cela m'a sauvé du problème en deuxième:
écrivez en console ceci:
npm i --save bluebird
npm i --save-dev @types/bluebird @types/core-js@0.9.36
dans le fichier où le problème est copier coller ce:
import * as Promise from 'bluebird';
npm i -- save-dev @types/es6-promise
après le commandement, vous feriez mieux de vérifier tsconfig.json s'assurer que la " cible "doit être grande que"es6". peut-être que tsc ne supporte pas encore es5.
j'utilise la bibliothèque "promise-polyfill"
, ce qui pourrait être la cause de mon numéro.
j'ai ajouté cette importation en haut de mon fichier:
import {Promise} from 'es6-promise';
aucune des réponses up-voted ici ne fonctionne pour moi. Voici une solution garantie et raisonnable. Mettez ceci près du haut de n'importe quel fichier de code qui utilise la promesse...
declare const Promise: any;
j'ai eu le même problème jusqu'à ce que j'ai ajouté le tableau de lib suivant en typeScript 3.0.1
tsconfig.json
{
"compilerOptions": {
"outDir": "lib",
"module": "commonjs",
"allowJs": false,
"declaration": true,
"target": "es5",
"lib": ["dom", "es2015", "es5", "es6"],
"rootDir": "src"
},
"include": ["./**/*"],
"exclude": ["node_modules", "**/*.spec.ts"]
}
si vous utilisez le référentiel défini dans votre projet, vous pourriez être confronté à ce récent numéro .
un contournement décent que vous pourriez utiliser (autre que d'attendre une mise à jour de la compilation du fichier de définitions ou de modifier votre code TS) est de spécifier une version explicite+construire pour les typographies core-js plutôt que de laisser Visual Studio choisir la dernière/la plus récente. J'en ai trouvé une qui ne semble pas affectée par ce problème (dans mon cas au moins), vous pouvez l'utiliser en remplaçant la ligne suivante de votre paquet .jso n fichier:
"scripts": {
"postinstall": "typings install dt~core-js --global"
}
avec le suivant:
"scripts": {
"postinstall": "typings install dt~core-js@0.9.7+20161130133742 --global"
}
Cela a réglé mon problème pour de bon. Toutefois, il est fortement recommandé de supprimer la référence explicite version+build dès que le problème sera publié.
pour plus d'informations sur cette question, vous pouvez aussi lire cet article .
Core-js N'a pas fonctionné pour moi car il a causé d'autres problèmes, cependant, il suffit d'installer la dernière version de npm i @types/es6-promise --save-dev
s'est débarrassé des problèmes. Les problèmes pour moi provenaient de la compilation d'un sdk qui utilisait rxjs. Voici l'erreur que j'ai eue:
`node_modules/rxjs/Observable.d.ts(59,60): error TS2693: Promise only refers to a type, but is being used as a value here.`
changez simplement l'objectif en" ES2017 " dans tsconfig.fichier json.
c'est mon tsconfig.dossier json
{
"compilerOptions": {
/* Basic Options */
"target": "ES2017", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
"declaration": true, /* Generates corresponding '.d.ts' file. */
"sourceMap": true, /* Generates corresponding '.map' file. */
"outDir": "./dist", /* Redirect output structure to the directory. */
"strict": true /* Enable all strict type-checking options. */
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules"
]
}
ayant passé beaucoup de temps à essayer de réparer ça. Je n'ai eu aucune chance avec n'importe quelle solution fournir ici ou ailleurs.
mais plus tard, il s'est rendu compte qu'il ne s'agissait pas tant de résoudre le problème. Mais vous devez aussi redémarrer le VSCODE pour qu'il prenne effet.
2018 Jul
j'ai créé un nouveau projet nodejs avec typscript dans VS 2017
Question:
Error TS2705 (TS) An async function or method in ES5/ES3 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your `--lib` option. .. (tsconfig or jsconfig project) ..
Error TS2693 (TS) 'Promise' only refers to a type, but is being used as a value here. .. (tsconfig or jsconfig project) ..
Cause :
Mon tsconfig.le fichier json a:
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"lib": ["es5"],
"sourceMap": true
},
"exclude": [
"node_modules"
]
}
Solution :
J'ai changé es5 dans ce qui précède à es6, il ressemble maintenant à ci-dessous:
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"lib": [ "es6" ],
"sourceMap": true
},
"exclude": [
"node_modules"
]
}
Visual studio a été mis à jour hier. Cependant, il crée toujours avec es5 comme valeur par défaut.
Espère que ça aide.
j'ai eu cette erreur mais je l'ai résolue en utilisant cette commande, mon nom de fichier ts est promises-fs.ts:
tsc promises-fs.ts --target es6 && node promises-fs.js
et l'erreur a disparu