AWS LambdaにTypeScriptを使用しようとしていますが、プロミスを使用していると、次のエラーが発生します。
error TS2693: 'Promise'は型を指すだけですが、ここでは値として使用されています。
私は、コードに以下のバリエーションを使ってみました
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}"`));
以下は私のdev依存関係にあるバージョンです:
"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"
]
}
私はtsタスクを実行するために以下の設定でgrunt-tsを使っています。
ts: {
app: {
tsconfig: {
tsconfig: "./tsconfig.json",
ignoreSettings: true
}
},
...
で言及されている解決策を試してみました。[ts] 'Promise'は型を指すだけですが、ここでは値として使用されています しかし運が悪い。
aws-sdk
についても同じ問題があり、"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
更新:
追加:
import {Promise} from 'es6-promise'
私はtsconfig.jsonファイルに以下のコードを追加することによってこれを解決しました。
"lib": [
"ES5",
"ES2015",
"DOM",
"ScriptHost"]
CompilerOptionsの target を変更することで解決しました。
{
"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
}
}
これが私の助言です。 vscode 1.21.1(MAC上)でテスト済み
Configの下に tsconfig.jsonを置いてください
"lib": [
"es2016",
"dom"
]
compilerOptions に
再起動IDE(この操作は必須:D)
エラーがスローされているファイルに以下の行を追加してください。これで問題は解決するはずです
declare var Promise: any;
TypeScriptと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 、 先のとがった & 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"
}
},
...
このエラーがありましたが、このコマンドを使用して解決しました。tsファイルの名前はpromises-fs.tsです。
tsc promises-fs.ts --target es6 && node promises-fs.js
そしてエラーはなくなった
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"]
}
ここで投票された答えのどれも私には効きません。これが保証された合理的な解決策です。これをPromiseを使用するコードファイルの先頭近くに置きます。
declare const Promise: any;
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.`
これは直観に反するかもしれませんが、esnext
にlib
を追加することで解決しました。
{
"compilerOptions": {
"lib": [
"esnext"
],
"target": "es5",
}
}
コンパイラによって示唆されるように、FIXは
lib
コンパイラオプションをes2015以降に変更してみてください。
プロジェクトで DefinitelyTyped リポジトリを使用している場合は、 この最近の問題 が発生している可能性があります。
(定義ファイルの更新されたビルドを待つかTSコードをリファクタリングすることを除いて)使用する可能性のある適切な回避策は、Visual Studioに最新または最新のものを選択させるのではなく、明示的なバージョン+ core-jsタイピングのビルドを指定することです。 。この問題の影響を受けないように思われるものが見つかりました(少なくとも私の場合)。 package.jso nファイルの次の行を置き換えてください。
"scripts": {
"postinstall": "typings install dt~core-js --global"
}
次のように:
"scripts": {
"postinstall": "typings install [email protected]+20161130133742 --global"
}
これで問題は解決しました。ただし、問題がリリースされるとすぐに明示的なバージョン+ビルド参照を削除することを強くお勧めします。
この問題に関するさらなる情報については、 このブログ記事を読むこともできます 私がこのトピックについて書いたものです。
私は同じ問題を抱えていました、そしてこれは2番目の問題から私を救った:
これをコンソールに書いてください。
npm i --save bluebird
npm i --save-dev @types/bluebird @types/[email protected]
問題がコピーされているファイルに、これを貼り付けます。
import * as Promise from 'bluebird';
npm i --save-dev @ types/es6-promise
upコマンドの後、tsconfig.jsonをチェックして、「target」が「es6」より大きくなければならないことを確認してください。多分tscはまだes5をサポートしていません。
Tsconfig.jsonファイルでターゲットを「ES2017」に変更するだけです。
これは私のtsconfig.jsonファイルです
{
"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"
]
}
これを直すのに多くの時間を費やしたこと。私はここまたは他の場所で提供された解決策に運がありませんでした。
しかし、その後、それが問題を解決するだけのものではないことに気づきました。しかし、VSCODEを再起動して有効にする必要もあります。
私は"promise-polyfill"
ライブラリを使用しています。これが私の問題の原因かもしれません。
このインポートをファイルの先頭に追加しました。
import {Promise} from 'es6-promise';