J'essaie d'utiliser TypeScript pour mon AWS Lambda et j'obtiens les erreurs suivantes partout où j'utilise des promesses.
erreur TS2693: "Promise" fait uniquement référence à un type, mais est utilisé comme valeur ici .
J'ai essayé d'utiliser les variantes suivantes du code
Utilisation du constructeur Promise
responsePromise = new Promise((resolve, reject) => {
return reject(new Error(`missing is needed data`))
})
en utilisant Promise.reject
responsePromise = Promise.reject(new Error(`Unsupported method "${request.httpMethod}"`));
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",
{
"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 l'exécution de la tâche ts.
ts: {
app: {
tsconfig: {
tsconfig: "./tsconfig.json",
ignoreSettings: true
}
},
...
J'ai essayé avec la solution mentionnée dans Je comprends: [ts] "Promise" fait uniquement référence à un type, mais est utilisé comme valeur ici mais pas de chance.
J'ai eu le même problème avec le aws-sdk
et je l'ai résolu en utilisant "target": "es2015"
. Ceci est mon fichier tsconfig.json
.
{
"compilerOptions": {
"outDir": "./dist/",
"sourceMap": false,
"noImplicitAny": false,
"module": "commonjs",
"target": "es2015"
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
Rencontrez la même erreur aujourd'hui et résolvez-la avec:
npm i --save-dev @types/es6-promise
Mettre à jour:
ajouter:
import {Promise} from 'es6-promise'
J'ai résolu ce problème en ajoutant le code ci-dessous au fichier tsconfig.json.
"lib": [
"ES5",
"ES2015",
"DOM",
"ScriptHost"]
Résolu en changeant le target 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
}
}
Voici mon conseil. Testé avec vscode 1.21.1 (sur MAC)
Mettez ci-dessous config à tsconfig.json
"lib": [
"es2016",
"dom"
]
dans compilerOptions
Redémarrez IDE (cette action est obligatoire: D)
Ajouter la ligne ci-dessous au fichier dans lequel une erreur est générée. Cela devrait résoudre le problème.
declare var Promise: any;
Avait le même problème avec TypeScript et le aws-sdk
. La solution consistait à changer la cible en es6
.
Mon fichier tsconfig.json
complet:
{
compilerOptions: {
outDir: ./dist/,
sourceMap: true,
noImplicitAny: true,
module: commonjs,
target: es6,
jsx: react,
allowJs: true
},
include: [
./src/**/*
]
}
Enfin, tsc a commencé à fonctionner sans erreur. Mais plusieurs changements. Merci à Sandro Keil , Pointy & unional
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"
}
},
...
J'ai eu le même problème jusqu'à ce que j'ai ajouté le tableau lib suivant dans 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"]
}
Aucune des réponses plus votées ici ne fonctionne pour moi. Voici une solution garantie et raisonnable. Placez-le en haut de n'importe quel fichier de code utilisant Promise ...
declare const Promise: any;
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 est partie
Cela peut sembler contre-intuitif, mais j’ai résolu ce problème en ajoutant esnext
à mon lib
.
{
"compilerOptions": {
"lib": [
"esnext"
],
"target": "es5",
}
}
Le FIX, comme suggéré par le compilateur est de
Essayez de remplacer l'option
lib
du compilateur par es2015 ou une version ultérieure.
J'ai eu le même problème et cela m'a sauvé du problème en seconde:
écrire dans la console ceci:
npm i --save bluebird
npm i --save-dev @types/bluebird @types/[email protected]
dans le fichier où le problème est copier-coller ceci:
import * as Promise from 'bluebird';
npm i --save-dev @ types/es6-promise
après la commande up, vous feriez mieux de vérifier tsconfig.json en vous assurant que la "cible" doit être supérieure à "es6". peut-être que tsc ne supporte pas encore es5.
Il suffit de changer la cible en "ES2017" dans le fichier tsconfig.json.
c'est mon fichier tsconfig.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"
]
}
Après avoir passé beaucoup de temps à essayer de résoudre ce problème. Je n'ai eu aucune chance avec aucune solution fournir ici ou ailleurs.
Mais plus tard, il s'est rendu compte que ce n'était pas tant que résoudre le problème. Mais vous devez également redémarrer le VSCODE pour qu'il prenne effet.
J'utilise la bibliothèque "promise-polyfill"
, qui peut être la cause de mon problème.
J'ai ajouté cette importation en haut de mon fichier:
import {Promise} from 'es6-promise';
Core-js ne fonctionnait pas pour moi car cela posait d'autres problèmes. Cependant, installer simplement la dernière version de npm i @types/es6-promise --save-dev
s'est débarrassé de ces problèmes. Les problèmes pour moi provenaient de la compilation d’un sdk utilisant rxjs. Voici l'erreur que je devenais:
`node_modules/rxjs/Observable.d.ts(59,60): error TS2693: Promise only refers to a type, but is being used as a value here.`
Si vous utilisez le référentiel DefinitelyTyped dans votre projet, il se peut que vous rencontriez ce problème récent .
Une solution de contournement décente que vous pouvez utiliser (autre que d’attendre une version mise à jour du fichier de définitions ou de refactoriser votre code TS) consiste à spécifier une version explicite + une génération pour les typages core-js plutôt que de laisser Visual Studio choisir le dernier/le plus récent . J'en ai trouvé un qui ne semble pas être affecté par ce problème (dans mon cas du moins), vous pouvez l'utiliser pour remplacer la ligne suivante de votre fichier package.jso n:
"scripts": {
"postinstall": "typings install dt~core-js --global"
}
Avec le suivant:
"scripts": {
"postinstall": "typings install [email protected]+20161130133742 --global"
}
Cela a résolu mon problème pour de bon. Cependant, il est fortement recommandé de supprimer la version explicite + la référence de compilation dès que le problème sera publié.
Pour plus d'informations sur ce problème, vous pouvez également lire ce message que j'ai écrit sur le sujet.