打字稿:错误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.`