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}"`));
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",
{
"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.
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"
]
}
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'
Ich habe dieses Problem gelöst, indem Sie der Datei tsconfig.json folgenden Code hinzugefügt haben.
"lib": [
"ES5",
"ES2015",
"DOM",
"ScriptHost"]
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
}
}
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)
Fügen Sie der Datei, in der der Fehler ausgegeben wird, folgende Zeile hinzu. Dies sollte das Problem beheben
declare var Promise: any;
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/**/*
]
}
Schließlich begann tsc fehlerfrei zu arbeiten. Aber mehrere Änderungen. Dank an Sandro Keil , Pointy & unional
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"
}
},
...
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"]
}
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;
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
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.
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';
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.
Ä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"
]
}
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.
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';
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.`
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.