typescript:error TS2693:'Promise'只引用一个类型,但在这里被用作值

kal*_*pal 137 javascript promise typescript

我正在尝试使用Typescript作为我的AWS Lambda,我在使用promises时遇到以下错误.

error TS2693: 'Promise' only refers to a type, but is being used as a value here.

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

使用Promise构造函数

responsePromise = new Promise((resolve, reject) => {
                    return reject(new Error(`missing is needed data`))
                })
Run Code Online (Sandbox Code Playgroud)

使用Promise.reject

responsePromise = Promise.reject(new Error(`Unsupported method "${request.httpMethod}"`));
Run Code Online (Sandbox Code Playgroud)

版本

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

"typescript": "^2.2.2"
"@types/aws-lambda": "0.0.9",
"@types/core-js": "^0.9.40",
"@types/node": "^7.0.12",
Run Code Online (Sandbox Code Playgroud)

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"
    ]
}
Run Code Online (Sandbox Code Playgroud)

我正在使用具有以下配置的grunt-ts来运行ts任务.

ts: {
            app: {
                tsconfig: {
                    tsconfig: "./tsconfig.json",
                    ignoreSettings: true
                }
            },
...
Run Code Online (Sandbox Code Playgroud)

我尝试使用我得到的解决方案:[ts]'Promise'仅指一种类型,但在这里被用作值但没有运气.

小智 116

我有同样的问题,aws-sdk我通过使用解决了它"target": "es2015".这是我的tsconfig.json档案.

{
    "compilerOptions": {
        "outDir": "./dist/",
        "sourceMap": false,
        "noImplicitAny": false,
        "module": "commonjs",
        "target": "es2015"
    },
    "include": [
        "src/**/*"
    ],
    "exclude": [
        "node_modules",
        "**/*.spec.ts"
    ]
}
Run Code Online (Sandbox Code Playgroud)

  • 更新/附录:如果你想仍然以es5为目标(为了更好的浏览器支持,并且很重要),只要你在编译器选项中提供它,它仍然可以工作:"lib":["es2015","dom"," ScriptHost"],我的诀窍是意识到我必须重新启动VSCode编辑器,然后才能在进行更改后开始工作. (7认同)
  • 谢谢桑德罗.试过但我的情况没有帮助. (4认同)
  • 这可能是那些以es5为目标的人的最佳答案.从es5切换到es2015也为我解决了这个问题.但是,请注意,在关闭并重新启动IDE /编辑器之前,您可能仍会看到错误.关于TSC(或它的监视模式)的一些东西让它看起来并没有修复它,但是需要重新启动vscode. (3认同)

小智 79

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

npm i --save-dev  @types/es6-promise
Run Code Online (Sandbox Code Playgroud)

更新:

加:

import {Promise} from 'es6-promise'
Run Code Online (Sandbox Code Playgroud)

  • 错误:它使用'es6-promise'`中的`import {Promise}行. (4认同)
  • +并在安装类型后重启VS Code也有帮助 (2认同)

Nil*_*esh 34

我通过在tsconfig.json文件中添加以下代码解决了这个问题.

"lib": [
    "ES5",
    "ES2015",
    "DOM",
    "ScriptHost"]
Run Code Online (Sandbox Code Playgroud)

  • 使用TypeScript 2.4.1我必须将字符串数组中的所有字符都更改为小写.然后它奏效了.非常感谢. (5认同)
  • 这对我有用,但请注意,"lib"数组需要位于tsconfig.json文件中的"compilerOptions"对象内. (2认同)

Man*_*i S 18

通过在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
}
}
Run Code Online (Sandbox Code Playgroud)


Nha*_*Cao 10

这是我的提示.使用vscode 1.21.1测试(在MAC上)

将下面的配置放到tsconfig.json中

"lib": [
"es2016",
"dom"
]
Run Code Online (Sandbox Code Playgroud)

compilerOptions

重新启动IDE(此操作是必需的:D)

  • 这在这里的多个答案中列出,并且**重要**肯定:"重新启动IDE(此操作是必需的)" (3认同)

Haz*_*SAN 6

我遇到了此错误,但通过使用以下命令解决了该问题,我的ts文件名为promises-fs.ts:

tsc promises-fs.ts --target es6 && node promises-fs.js
Run Code Online (Sandbox Code Playgroud)

错误消失了


Ima*_*eem 5

将以下行添加到文件中引发错误.这应该解决问题

declare var Promise: any;
Run Code Online (Sandbox Code Playgroud)

  • 这只是删除'Promise'的类型检查,而不是修复它,以便Typescript找到正确的类型. (17认同)

Jon*_*ear 5

我遇到了同样的问题,直到我在 typeScript 3.0.1 中添加了以下 lib 数组

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"]
}
Run Code Online (Sandbox Code Playgroud)


Was*_*des 5

index.ts用这些组合属性消除了同样的错误:

在 tsconfig.json 中:

  "compilerOptions": {
    "target": "ES6"
Run Code Online (Sandbox Code Playgroud)

在 package.json 中:

  "main": "index.ts",
  "scripts": {
    "start": "tsc -p tsconfig.json && node index.js"
Run Code Online (Sandbox Code Playgroud)