javascript - tutorial - mecanografiado: error TS2693: ''Promesa'' solo se refiere a un tipo, pero se está utilizando como un valor aquí
then javascript (16)
Agregue la línea siguiente al archivo donde se produce el error. Esto debería solucionar el problema.
declare var Promise: any;
Intento usar Typescript para mi AWS Lambda y recibo los siguientes errores siempre que utilizo las promesas.
error TS2693: ''Promise'' only refers to a type, but is being used as a value here.
Intenté usar las siguientes variaciones en el código
Usando el constructor Promise
responsePromise = new Promise((resolve, reject) => {
return reject(new Error(`missing is needed data`))
})
usando Promise.reject
responsePromise = Promise.reject(new Error(`Unsupported method "${request.httpMethod}"`));
Versiones
Las siguientes son las versiones en mis dependencias de desarrollo:
"typescript": "^2.2.2"
"@types/aws-lambda": "0.0.9",
"@types/core-js": "^0.9.40",
"@types/node": "^7.0.12",
Contenido de 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"
]
}
Estoy usando grunt-ts con la siguiente configuración para ejecutar ts task.
ts: {
app: {
tsconfig: {
tsconfig: "./tsconfig.json",
ignoreSettings: true
}
},
...
Intenté con la solución mencionada en Me sale: [ts] ''Promesa'' solo se refiere a un tipo, pero se está utilizando como un valor aquí, pero sin suerte.
Aquí está mi consejo. Probado con vscode 1.21.1 (en MAC)
Ponga debajo config para tsconfig.json
"lib": [
"es2016",
"dom"
]
en compilerOptions
Reiniciar IDE (esta acción es obligatoria: D)
Core-js no funcionó para mí, ya que causó otros problemas, sin embargo, simplemente instalando la última versión de npm i @types/es6-promise --save-dev
se deshizo de los problemas. Los problemas para mí se derivan de la compilación de un SDK que estaba usando rxjs. Aquí está el error que estaba recibiendo:
`node_modules/rxjs/Observable.d.ts(59,60): error TS2693: Promise only refers to a type, but is being used as a value here.`
Después de haber pasado mucho tiempo tratando de arreglar esto. No tuve suerte con ninguna solución proporcionada aquí o en otro lugar.
Pero luego se dio cuenta de que no era tanto solo resolver el problema. Pero también necesita reiniciar el VSCODE para que tenga efecto.
Encuentra el mismo error hoy y resuelto con:
npm i --save-dev @types/es6-promise
Estoy utilizando la biblioteca "promise-polyfill"
, que puede ser la causa de mi problema.
Agregué esta importación al principio de mi archivo:
import {Promise} from ''es6-promise'';
Finalmente tsc comenzó a trabajar sin ningún error. Pero múltiples cambios Gracias a , Pointy & unional
- Se eliminó dt ~ aws-lambda
- Se eliminaron opciones como noEmit, declaración
- Modified Gruntfile y eliminado 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"
}
},
...
Lo resolví agregando el código siguiente al archivo tsconfig.json.
"lib": [
"ES5",
"ES2015",
"DOM",
"ScriptHost"]
Ninguna de las respuestas votadas aquí funciona para mí. Aquí hay una solución garantizada y razonable. Coloque esto cerca de la parte superior de cualquier archivo de código que use Promise ...
declare const Promise: any;
Resuelto al cambiar el objetivo en 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
}
}
Si está utilizando el repositorio DefinitelyTyped en su proyecto, es posible que esté experimentando este problema reciente .
Una solución decente que podría usar (aparte de esperar una compilación actualizada del archivo de definiciones o refactorizar su código TS) es especificar una versión + compilación explícita para los typings core-js en lugar de dejar que Visual Studio elija el último / más reciente . Encontré uno que parece no ser afectado por este problema (en mi caso al menos), puedes usarlo reemplazando la siguiente línea de tu archivo package.jso n:
"scripts": {
"postinstall": "typings install dt~core-js --global"
}
Con el siguiente:
"scripts": {
"postinstall": "typings install [email protected]+20161130133742 --global"
}
Esto solucionó mi problema para siempre. Sin embargo, es muy recomendable eliminar la versión explícita + referencia de compilación tan pronto como se publique el problema.
Para obtener más información sobre este tema, también puede leer esta publicación .
Simplemente cambie el objetivo a "ES2017" en el archivo tsconfig.json.
este es mi archivo 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"
]
}
Tuve el mismo problema con aws-sdk
y lo resolví usando "target": "es2015"
. Este es mi archivo tsconfig.json
.
{
"compilerOptions": {
"outDir": "./dist/",
"sourceMap": false,
"noImplicitAny": false,
"module": "commonjs",
"target": "es2015"
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
Tuve el mismo problema con el mecanografiado y el aws-sdk
. La solución fue cambiar el objetivo a es6
.
Mi archivo tsconfig.json
completo:
{
compilerOptions: {
outDir: ./dist/,
sourceMap: true,
noImplicitAny: true,
module: commonjs,
target: es6,
jsx: react,
allowJs: true
},
include: [
./src/**/*
]
}
Tuve el mismo problema y esto me salvó del problema en el segundo:
escribe en la consola esto:
npm i --save bluebird
npm i --save-dev @types/bluebird @types/[email protected]
en el archivo donde el problema es copiar, pega esto:
import * as Promise from ''bluebird'';
npm i --save-dev @ types / es6-promise
después del comando, es mejor que revises tsconfig.json asegúrate de que el "objetivo" debe ser grande que "es6". tal vez tsc no sea compatible con es5 aún.