webentwicklung-frage-antwort-db.com.de

typoskript: Fehler TS2693: 'Promise' bezieht sich nur auf einen Typ, wird hier jedoch als Wert verwendet

Ich versuche, TypeScript für meine AWS Lambda zu verwenden, und ich bekomme die folgenden Fehler, wo immer ich verspreche.

 Fehler TS2693: 'Promise' bezieht sich nur auf einen Typ, wird hier jedoch als Wert verwendet .

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 Task ts.

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

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

119
kalyanvgopal

Ich hatte das gleiche Problem mit dem aws-sdk und habe es mit "target": "es2015" gelöst. Dies ist meine tsconfig.json-Datei.

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

Triff den gleichen Fehler heute und löste ihn mit:

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

Update:

hinzufügen:

import {Promise} from 'es6-promise'
71
Kenshin

Ich habe dieses Problem gelöst, indem Sie der Datei tsconfig.json folgenden Code hinzugefügt haben.

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

Gelöst durch Ändern der target in 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
Mani S

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

Setze die config in tsconfig.json

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

in compilerOptions

Starten Sie IDE neu (diese Aktion ist erforderlich: D)

10
Nhan Cao

Fügen Sie der Datei, in der der Fehler ausgegeben wird, folgende Zeile hinzu. Dies sollte das Problem beheben

declare var Promise: any;
8
Imamudin Naseem

Hatte das gleiche Problem mit TypeScript und dem aws-sdk. Die Lösung bestand darin, das Ziel in es6 zu ändern.

Meine vollständige tsconfig.json-Datei:

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

Schließlich begann tsc fehlerfrei zu arbeiten. Aber mehrere Änderungen. Dank an Sandro Keil , Pointy & unional

  • Dt ~ aws-lambda entfernt
  • Entfernte Optionen wie noEmit, Deklaration
  • Geänderte Gruntdatei und ignoreSettings entfernt

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
kalyanvgopal

Ich hatte das gleiche Problem, bis ich das folgende lib-Array in TypeScript 3.0.1 hinzugefügt habe

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"]
}
2
Jon Gear

Keine der positiv gestimmten Antworten funktioniert für mich. Hier ist eine garantierte und vernünftige Lösung. Platzieren Sie diese in der Nähe einer Codedatei, die Promise verwendet ...

declare const Promise: any;
2
user1618323

Ich hatte diesen Fehler, aber ich habe ihn mit diesem Befehl gelöst.

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

und der Fehler ist weg

1
Hazem HASAN

Nun, das könnte kontraintuitiv sein, aber ich habe dieses Problem gelöst, indem ich esnext meiner lib hinzugefügt habe. 

{
  "compilerOptions": {
    "lib": [
        "esnext"
    ],
    "target": "es5",
  }
}

Das FIX ist, wie vom Compiler vorgeschlagen, zu

Ändern Sie die lib-Compileroption in es2015 oder höher.

1

Ich hatte das gleiche Problem und das rettete mich in zweiter Sekunde vor dem Problem:

schreibe dies in die Konsole:

npm i --save bluebird
npm i --save-dev @types/bluebird @types/[email protected]

fügen Sie Folgendes in die Datei ein, in der das Problem kopiert wurde:

import * as Promise from 'bluebird';
0
Zack Zilic

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

nach dem Aufwärtsbefehl sollten Sie tsconfig.json besser überprüfen, ob das "Ziel" größer als "es6" sein muss. vielleicht unterstützt tsc es5 noch nicht.

0
Mostone

Ändern Sie einfach das Ziel in "tsconfig.json" in "ES2017".

dies ist meine tsconfig.json-Datei

{
"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
Camilo Soto

Ich habe viel Zeit damit verbracht, das Problem zu beheben. Ich hatte kein Glück mit irgendeiner Lösung hier oder anderswo.

Später wurde jedoch klar, dass es nicht nur die Lösung des Problems war. Sie müssen den VSCODE aber auch neu starten, damit er wirksam wird.

0
ravish.hacker

Ich verwende die "promise-polyfill"-Bibliothek, die die Ursache meines Problems sein kann.

Ich habe diesen Import oben in meine Datei eingefügt:

import {Promise} from 'es6-promise';
0
Matthias Dailey

Core-js funktionierte nicht für mich, da dies zu anderen Problemen führte. Die Installation der neuesten Version von npm i @types/es6-promise --save-dev löste jedoch die Probleme. Die Probleme für mich rührten sich aus dem Kompilieren einer Sdk, die RXJS verwendete. Hier ist der Fehler, den ich bekam:

`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

Wenn Sie in Ihrem Projekt das Repository DefinitelyTyped verwenden, ist möglicherweise diese letzte Ausgabe aufgetreten.

Eine anständige Problemumgehung, die Sie verwenden können (abgesehen vom Warten auf einen aktualisierten Build der Definitionsdatei oder dem Umgestalten Ihres TS-Codes) ist die Angabe einer expliziten Version + eines Builds für die Core-js-Typisierung, anstatt dass Visual Studio die neueste/letzte Version auswählt . Ich habe ein Problem gefunden, das von diesem Problem nicht betroffen zu sein scheint (in meinem Fall zumindest). Sie können es verwenden, indem Sie die folgende Zeile aus Ihrer Datei package.jso n ersetzen:

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

Mit dem folgenden:

  "scripts": {
    "postinstall": "typings install [email protected]+20161130133742 --global"
  }

Das hat mein Problem endgültig behoben. Es wird jedoch dringend empfohlen, die explizite Version + Build-Referenz zu entfernen, sobald das Problem veröffentlicht wird.

Für weitere Informationen zu diesem Problem können Sie auch diesen Blogeintrag lesen lesen, das ich zu diesem Thema geschrieben habe.

0
Darkseal