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.

103
demandé sur Community 2017-03-30 16:22:01

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"
    ]
}
96
répondu Sandro Keil 2017-03-30 15:41:17

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'
61
répondu Kenshin 2018-06-21 11:09:50

j'ai résolu cela en ajoutant ci-dessous le code à tsconfig.fichier json.

"lib": [
    "ES5",
    "ES2015",
    "DOM",
    "ScriptHost"]
28
répondu Nilesh 2017-05-18 20:54:03

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
}
}
17
répondu Mani S 2017-05-31 20:02:26

ajouter la ligne suivante au fichier où l'erreur est lancée.Cela devrait résoudre le problème

declare var Promise: any;
7
répondu Imamudin Naseem 2017-06-09 09:11:15

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 )

7
répondu Nhan Cao 2018-05-09 11:07:17

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"
                }
            },
...
3
répondu kalyanvgopal 2017-05-23 12:10:45

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/**/*
    ]
}
2
répondu Fanus du Toit 2017-08-11 09:35:13

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';
1
répondu Zack Zilic 2017-08-08 14:13:26

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.

1
répondu Mostone 2018-03-04 15:54:50

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';
1
répondu Matthias Dailey 2018-03-30 23:37:27

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;
1
répondu user1618323 2018-04-06 16:56:18

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"]
}
1
répondu Jon Gear 2018-08-18 16:39:01

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 .

0
répondu Darkseal 2017-04-21 15:05:15

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.`
0
répondu Danny Fenstermaker 2017-11-14 17:56:59

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"
  ]
}
0
répondu Camilo Soto 2018-02-08 04:47:36

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.

0
répondu ravish.hacker 2018-04-08 15:42:41

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.

0
répondu Manohar Reddy Poreddy 2018-07-14 03:01:23

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

0
répondu Hazem HASAN 2018-09-20 12:45:55