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, чтобы он вступил в силу.