web-dev-qa-db-ja.com

typescript:error TS2693: 'Promise'は型を指すだけですが、ここでは値として使用されています

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",

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

私はtsタスクを実行するために以下の設定でgrunt-tsを使っています。

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

で言及されている解決策を試してみました。[ts] 'Promise'は型を指すだけですが、ここでは値として使用されています しかし運が悪い。

125
kalyanvgopal

aws-sdkについても同じ問題があり、"target": "es2015"を使用して解決しました。これは私のtsconfig.jsonファイルです。

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

今日同じエラーに遭遇し、それでそれを解決しました:

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

更新:

追加:

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

私はtsconfig.jsonファイルに以下のコードを追加することによってこれを解決しました。

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

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
}
}
18
Mani S

これが私の助言です。 vscode 1.21.1(MAC上)でテスト済み

Configの下に tsconfig.jsonを置いてください

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

compilerOptions

再起動IDE(この操作は必須:D)

10
Nhan Cao

エラーがスローされているファイルに以下の行を追加してください。これで問題は解決するはずです

declare var Promise: any;
7
Imamudin Naseem

TypeScriptとaws-sdkについても同じ問題がありました。解決策は、ターゲットをes6に変更することでした。

私の完成したtsconfig.jsonファイル:

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

ついにtscはエラーなく動作し始めました。しかし、複数の変更があります。おかげで Sandro Keil先のとがったunional

  • Dt〜aws-lambdaを削除しました
  • NoEmit、宣言などのオプションを削除
  • Gruntfileを修正し、ignoreSettingsを削除しました。

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"
                }
            },
...
4
kalyanvgopal

このエラーがありましたが、このコマンドを使用して解決しました。tsファイルの名前はpromises-fs.tsです。

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

そしてエラーはなくなった

3
Hazem HASAN

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

ここで投票された答えのどれも私には効きません。これが保証された合理的な解決策です。これをPromiseを使用するコードファイルの先頭近くに置きます。

declare const Promise: any;
2
user1618323

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.`
1

これは直観に反するかもしれませんが、esnextlibを追加することで解決しました。

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

コンパイラによって示唆されるように、FIXは

libコンパイラオプションをes2015以降に変更してみてください。

1

プロジェクトで 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"
  }

これで問題は解決しました。ただし、問題がリリースされるとすぐに明示的なバージョン+ビルド参照を削除することを強くお勧めします。

この問題に関するさらなる情報については、 このブログ記事を読むこともできます 私がこのトピックについて書いたものです。

1
Darkseal

私は同じ問題を抱えていました、そしてこれは2番目の問題から私を救った:

これをコンソールに書いてください。

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

問題がコピーされているファイルに、これを貼り付けます。

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

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

upコマンドの後、tsconfig.jsonをチェックして、「target」が「es6」より大きくなければならないことを確認してください。多分tscはまだes5をサポートしていません。

0
Mostone

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"
  ]
}
0
Camilo Soto

これを直すのに多くの時間を費やしたこと。私はここまたは他の場所で提供された解決策に運がありませんでした。

しかし、その後、それが問題を解決するだけのものではないことに気づきました。しかし、VSCODEを再起動して有効にする必要もあります。

0
ravish.hacker

私は"promise-polyfill"ライブラリを使用しています。これが私の問題の原因かもしれません。

このインポートをファイルの先頭に追加しました。

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