Typescript: ошибка TS2693: "Promise" относится только к типу, но используется как значение здесь

Я пытаюсь использовать Typescript для моей AWS Lambda, и я получаю следующие ошибки, когда когда-либо использую promises.

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

Я попытался использовать следующие варианты кода

Использование конструктора 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"
    ]
}

Я использую grunt-ts со следующей конфигурацией для запуска ts-задачи.

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

Я попытался с решением, упомянутым в Я получаю: [ts] 'Promise' относится только к типу, но используется как значение здесь, но не повезло.

Ответ 1

У меня была такая же проблема с aws-sdk, и я решил ее с помощью "target": "es2015". Это мой файл tsconfig.json.

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

Ответ 2

Обнаружил сегодня ту же ошибку и решил:

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

Обновить:

добавлять:

import {Promise} from 'es6-promise'

Ответ 3

Я решил это, добавив ниже код в файл tsconfig.json.

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

Ответ 4

Решено, изменив цель в 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
}
}

Ответ 5

Вот мой совет. Протестировано с vscode 1.21.1 (на MAC)

Поместите ниже config в tsconfig.json

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

в compilerOptions

Перезапустите IDE (требуется это действие: D)

Ответ 6

Добавьте строку ниже в файл, где выдается ошибка. Это должно решить проблему

declare var Promise: any;

PS: это определенно не оптимальное решение

Ответ 7

У меня была эта ошибка, но я решил ее с помощью этой команды, мое имя файла ts - promises-fs.ts:

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

и ошибка ушла

Ответ 8

Наконец tsc начал работать без ошибок. Но несколько изменений. Благодаря Sandro Keil, Pointy и unional

  • Удалено dt ~ aws-lambda
  • Удалены параметры, такие как noEmit, декларация
  • Измененный файл Grunt и удаленный 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"
                }
            },
...

Ответ 9

Имела ту же проблему с typescript и aws-sdk. Решением было изменить цель на es6.

Мой полный файл tsconfig.json:

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

Ответ 10

Ни один из полученных здесь ответов не работает для меня. Здесь гарантированное и разумное решение. Поместите это в верхней части любого файла кода, который использует Promise...

declare const Promise: any;

Ответ 11

У меня была та же проблема, пока я не добавил следующий массив lib в typeScript 3.0.1

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

Ответ 12

Если вы используете репозиторий DefiniteTyped в своем проекте, вы можете столкнуться с этой недавней проблемой.

Достойный обходной путь, который вы могли бы использовать (кроме ожидания обновления сборки файла определений или рефакторинга кода TS), - это указать явную версию + сборку для типизаций core-js, а не позволять Visual Studio выбирать самую последнюю/последнюю версию, Я обнаружил, что эта проблема, кажется, не затронута этой проблемой (по крайней мере, в моем случае), вы можете использовать ее, заменив следующую строку в файле package.jso n:

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

Со следующим:

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

Это исправило мою проблему навсегда. Тем не менее, настоятельно рекомендуется удалить явную версию + ссылку на сборку, как только проблема будет выпущена.

Для получения дополнительной информации по этой проблеме, вы также можете прочитать этот пост в блоге, который я написал по этой теме.

Ответ 13

Core-js не работал у меня, поскольку это вызвало другие проблемы, однако просто установка последней версии npm i @types/es6-promise --save-dev избавилась от проблем. Проблемы для меня связаны с компиляцией sdk, которая использовала rxjs. Вот ошибка, которую я получал:

`node_modules/rxjs/Observable.d.ts(59,60): error TS2693: Promise only refers to a type, but is being used as a value here.`

Ответ 14

Ну, это может быть нелогичным, но я решил это добавление esnext моей lib.

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

ИСПРАВЛЕНИЕ, как предлагает компилятор, заключается в

Попробуйте изменить опцию компилятора lib на es2015 или новее.

Ответ 15

У меня была та же проблема, и это избавило меня от проблемы во втором:

напишите в консоли следующее:

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

в файле, где проблема заключается в копировании:

import * as Promise from 'bluebird';

Ответ 16

Просто измените цель на "ES2017" в файле tsconfig.json.

это мой файл 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"
  ]
}

Ответ 17

npm я --save-dev @types/es6-обещание

после команды up лучше проверить tsconfig.json и убедиться, что "target" должен быть больше, чем "es6". возможно tsc пока не поддерживает es5.

Ответ 18

Я использую библиотеку "promise-polyfill", которая может быть причиной моей проблемы.

Я добавил этот импорт в начало моего файла:

import {Promise} from 'es6-promise';

Ответ 19

Потратив много времени, пытаясь это исправить. Мне не повезло с каким-либо решением, предоставленным здесь или в другом месте.

Но потом понял, что это было не просто решение проблемы. Но вам также нужно перезапустить VSCODE, чтобы он вступил в силу.