打字稿:错误TS2693:“承诺”只是指一种types,但在这里被用作一个值

我正在尝试为我的AWS Lambda使用Typescript,并且在使用Promise的时候出现以下错误。

错误TS2693:'承诺'只是指一个types,但在这里被用作一个值。

我尝试在代码中使用以下变化

使用Promise构造函数

responsePromise = new Promise((resolve, reject) => { return reject(new Error(`missing is needed data`)) }) 

使用Promise.reject

 responsePromise = Promise.reject(new Error(`Unsupported method "${request.httpMethod}"`)); 

版本

以下是我的开发依赖项中的版本:

 "typescript": "^2.2.2" "@types/aws-lambda": "0.0.9", "@types/core-js": "^0.9.40", "@types/node": "^7.0.12", 

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" ] } 

我正在使用grunt-ts和以下configuration来运行ts任务。

 ts: { app: { tsconfig: { tsconfig: "./tsconfig.json", ignoreSettings: true } }, ... 

我尝试用我得到的解决scheme:[ts]'承诺'只是指一种types,但在这里被用作一个值,但没有运气。

我和aws-sdk有同样的问题,我用"target": "es2015"解决了这个问题"target": "es2015" 。 这是我的tsconfig.json文件。

 { "compilerOptions": { "outDir": "./dist/", "sourceMap": false, "noImplicitAny": false, "module": "commonjs", "target": "es2015" }, "include": [ "src/**/*" ], "exclude": [ "node_modules", "**/*.spec.ts" ] } 

今天遇到同样的错误,并解决它:

 npm i --save-dev @types/es6-promise 

将下面的行添加到抛出错误的文件中。这应该解决问题

 declare var Promise: any; 

通过更改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 } } 

我通过将下面的代码添加到tsconfig.json文件来解决这个问题。

 "lib": [ "ES5", "ES2015", "DOM", "ScriptHost"] 

与打字稿和aws-sdk有相同的问题。 解决的办法是把目标改为es6

我完整的tsconfig.json文件:

 { compilerOptions: { outDir: ./dist/, sourceMap: true, noImplicitAny: true, module: commonjs, target: es6, jsx: react, allowJs: true }, include: [ ./src/**/* ] } 

最后tsc开始工作没有任何错误。 但多个变化。 感谢Sandro Keil , Pointy & unional

  • 删除了dt〜aws-lambda
  • 删除了noEmit,声明等选项
  • 修改Gruntfile并删除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" } }, ... 

我有同样的问题,这在第二个问题中解救了我:

写在控制台这个:

 npm i --save bluebird npm i --save-dev @types/bluebird @types/core-js@0.9.36 

在问题是复制粘贴这个文件:

 import * as Promise from 'bluebird'; 

如果您在项目中使用DefinitelyTyped存储库,则可能会遇到此最近的问题 。

你可以使用一个体面的解决方法(除了等待定义文件的更新版本或重构你的TS代码之外)是为core-jstypes指定一个明确的版本+构build版本,而不是让Visual Studioselect最新的版本。 我发现一个似乎不受这个问题的影响(在我的情况下,至less),你可以使用它从你的package.jso n文件中replace下面一行:

  "scripts": { "postinstall": "typings install dt~core-js --global" } 

有以下一个:

  "scripts": { "postinstall": "typings install dt~core-js@0.9.7+20161130133742 --global" } 

这固定好我的问题。 不过,强烈build议在问题发布后立即删除显式版本+构build参考。

有关这个问题的更多信息,你也可以阅读这篇文章 。

Core-js不适合我,因为它导致了其他问题,但是,只是安装最新版本的npm i @types/es6-promise --save-dev摆脱了问题。 我的问题源于编译使用rxjs的sdk。 这是我得到的错误:

 `node_modules/rxjs/Observable.d.ts(59,60): error TS2693: Promise only refers to a type, but is being used as a value here.`