Typoskript: Fehler TS2693: „Promise“ bezieht sich nur auf einen Typ, wird hier aber als Wert verwendet

Lesezeit: 5 Minuten

Benutzer-Avatar
kalyanvgopal

Ich versuche, Typescript für mein AWS Lambda zu verwenden, und ich erhalte die folgenden Fehler, wo immer ich Versprechungen verwende.

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

Ich habe versucht, die folgenden Variationen im Code zu verwenden

Verwenden des Promise-Konstruktors

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

mit Promise.reject

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

Versionen

Im Folgenden sind die Versionen in meinen Dev-Abhängigkeiten aufgeführt:

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

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

Ich verwende grunt-ts mit der folgenden Konfiguration zum Ausführen der ts-Aufgabe.

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

Ich habe es mit der in ich erwähnten Lösung versucht: [ts] ‘Promise’ bezieht sich nur auf einen Typ, wird hier aber als Wert verwendet, aber kein Glück.

  • Für die Callback-Funktion, die an den Promise-Konstruktor übergeben wird, ist kein Rückgabewert erforderlich. Einfach loswerden return.

    – Spitze

    30. März 2017 um 13:23 Uhr

  • Meinst du so? responsePromise = new Promise((resolve, reject) => { reject(new Error("missing is needed data"))}) Ich versuchte es. Aber es half nicht bei dem Problem.

    – kalyanvgopal

    30. März 2017 um 13:29 Uhr


  • Ja. JavaScript kümmert sich nicht darum, ob Sie einen Wert zurückgeben oder nicht, aber es achtet nicht darauf. TypeScript kümmert sich jedoch darum.

    – Spitze

    30. März 2017 um 13:30 Uhr

  • Ich habs. Aber warum kompiliert tsc keine Variante von Promose.resolve oder Promise.reject?

    – kalyanvgopal

    30. März 2017 um 13:33 Uhr

  • Das weiß ich nicht. Wie genau ist responsePromise erklärt?

    – Spitze

    30. März 2017 um 13:35 Uhr


Ich hatte das gleiche Problem mit der aws-sdk und ich habe es mit gelöst "target": "es2015". Das ist mein tsconfig.json Datei.

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

  • Vielleicht der @types/aws-lambda sind veraltet. Amazon liefert Typescript-Typen mit der offizielles SDK. DefinitelyTyped ist nicht erforderlich.

    – Sandro Keil

    31. März 2017 um 8:54 Uhr

  • Das löste genau den in der Frage definierten Fehler für mich und ich importierte nur rxjs, nicht einmal mit Promis. Vielen Dank!

    – muzurB

    26. Mai 2017 um 2:22 Uhr

  • Dies ist wahrscheinlich die beste Antwort für diejenigen, die zunächst auf es5 abzielten. Der Wechsel von es5 zu es2015 hat dies auch für mich behoben. Seien Sie jedoch gewarnt, Sie werden den Fehler wahrscheinlich immer noch sehen, bis Sie Ihre IDE/Ihren Editor herunterfahren und neu starten. Irgendetwas an der TSC (oder ihrem Überwachungsmodus) ließ den Anschein erwecken, dass dies das Problem nicht behebt, obwohl es tatsächlich so war, sondern einen Neustart von vscode erforderte.

    Benutzer2080225

    9. Oktober 2017 um 23:30 Uhr

  • Update/Ergänzung: Wenn Sie immer noch auf es5 abzielen möchten (für eine bessere Browserunterstützung und das ist wichtig), funktioniert das immer noch, solange Sie dies in Ihren Compileroptionen angeben: “lib” : [“es2015”, “dom”, “ScriptHost”]Der Trick für mich war zu erkennen, dass ich den VSCode-Editor neu starten musste, bevor er nach dieser Änderung zu arbeiten begann.

    Benutzer2080225

    10. Oktober 2017 um 1:39 Uhr

Benutzer-Avatar
Kenshin

Stöße heute auf den gleichen Fehler und habe ihn gelöst mit:

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

Aktualisieren:

hinzufügen:

import {Promise} from 'es6-promise'

  • + und ein Neustart von VS Code hilft auch nach der Installation der Typen

    – Legenden

    6. Februar 2018 um 23:31 Uhr

  • Erratum: Es funktioniert mit dieser Zeile import {Promise} from 'es6-promise';

    – Loïc Coenen

    2. April 2018 um 13:52 Uhr


  • wo soll “import {Promise} from ‘es6-promise'” hinzugefügt werden?

    – bArraxas

    24. Juli 2018 um 7:54 Uhr

  • Ich habe diese Lösung in der Vergangenheit verwendet, aber sie funktioniert im Moment nicht für mich. import { Promise } from '../node_modules/es6-promise/es6-promise';, scheint aber gut zu funktionieren. Warum kann TS die installierten Typisierungen nicht finden?

    – schnarchen

    1. Dezember 2019 um 22:00 Uhr

Benutzer-Avatar
Niles

Ich habe dies gelöst, indem ich den folgenden Code zur Datei tsconfig.json hinzugefügt habe.

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

  • Dies hat bei mir funktioniert, aber beachten Sie, dass sich das Array „lib“ innerhalb des Objekts „compilerOptions“ in der Datei tsconfig.json befinden muss.

    – BillyRayCyrus

    29. Juni 2017 um 14:46 Uhr

  • Mit TypeScript 2.4.1 musste ich alle Zeichen im String-Array in Kleinbuchstaben ändern. Dann hat es geklappt. Danke vielmals.

    – JDTLH9

    18. Juli 2017 um 10:57 Uhr


Gelöst durch Ändern der Ziel in CompilerOptionen.

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

Benutzer-Avatar
Nhan Cao

Hier ist mein Tipp. Getestet mit vscode 1.21.1 (auf MAC)

Setzen Sie unten config auf tsconfig.json

"lib": [
"es2016",
"dom"
]

hinein
CompilerOptionen

IDE neu starten (diese Aktion ist erforderlich 😀 )

  • Dies ist in mehreren der Antworten hier und dort aufgeführt wichtig sicher: “IDE neu starten (diese Aktion ist erforderlich)”

    – atconway

    19. September 2018 um 19:07 Uhr


Benutzer-Avatar
Hazem HASAN

Ich hatte diesen Fehler, aber ich habe ihn mit diesem Befehl behoben, mein ts-Dateiname ist Promises-fs.ts:

tsc promises-fs.ts --target es6 && node promises-fs.js

und der Fehler ist weg

  • Dies ist in mehreren der Antworten hier und dort aufgeführt wichtig sicher: “IDE neu starten (diese Aktion ist erforderlich)”

    – atconway

    19. September 2018 um 19:07 Uhr


Benutzer-Avatar
Washington Guedes

Ich habe den gleichen Fehler in behoben index.ts mit diesen kombinierten Eigenschaften:

In tsconfig.json:

  "compilerOptions": {
    "target": "ES6"

Und in package.json:

  "main": "index.ts",
  "scripts": {
    "start": "tsc -p tsconfig.json && node index.js"

1282400cookie-checkTyposkript: Fehler TS2693: „Promise“ bezieht sich nur auf einen Typ, wird hier aber als Wert verwendet

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy