javascript - typescript: pogreška TS2693: 'Promise' se odnosi samo na tip, ali se ovdje koristi kao vrijednost
Pokušavam koristiti Typescript za moj AWS Lambda i dobivam sljedeće pogreške gdje god koristim obećanja (promises).
error TS2693: 'Promise' only refers to a type, but is being used as a value here.
Pokušao sam koristiti sljedeće varijacije u kodu
Korištenje Promise konstruktora
responsePromise = new Promise((resolve, reject) => {
return reject(new Error(`missing is needed data`))
})
korištenje Promise.reject
responsePromise = Promise.reject(new Error(`Unsupported method "${request.httpMethod}"`));
Verzije
Sljedeće su verzije u mojim razvojim ovisnostima:
"typescript": "^2.2.2"
"@types/aws-lambda": "0.0.9",
"@types/core-js": "^0.9.40",
"@types/node": "^7.0.12",
Sadržaj 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"
]
}
Koristim grunt-ts s sljedećom konfiguracijom za pokretanje ts zadatka.
ts: {
app: {
tsconfig: {
tsconfig: "./tsconfig.json",
ignoreSettings: true
}
},
...
Pokušao sam s rješenjem spomenutim u I get: [ts] 'Promise' se odnosi samo na tip, ali se ovdje koristi kao vrijednost, ali bez uspjeha.
Odgovor #1
Imao sam isti problem s aws-sdk i riješio sam ga korištenjem "target": "es2015". Ovo je moja tsconfig.json datoteka.
{
"compilerOptions": {
"outDir": "./dist/",
"sourceMap": false,
"noImplicitAny": false,
"module": "commonjs",
"target": "es2015"
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
Odgovor #2
Susreo sam istu pogrešku danas i riješio je na sljedeći način:
npm i --save-dev @types/es6-promise
Ažuriranje:
dodaj :
import {Promise} from 'es6-promise'
Odgovor #3
Riješio sam ovo tako da sam dodao sljedeći kod u datoteku tsconfig.json.
"lib": [
"ES5",
"ES2015",
"DOM",
"ScriptHost"]
Odgovor #4
Riješeno promjenom target u 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
}
}
Odgovor #5
Evo mog savjeta. Testirano s vscode 1.21.1 (na MAC-u)
Stavite dolje navedenu konfiguraciju u tsconfig.json
"lib": [
"es2016",
"dom"
]
u compilerOptions
Ponovno pokreni IDE (ova akcija je potrebna :D )
Odgovor #6
Riješio sam ovu istu pogrešku u index.ts s ovim kombiniranim svojstvima:
U tsconfig.json:
"compilerOptions": {
"target": "ES6"
I u package.json:
"main": "index.ts",
"scripts": {
"start": "tsc -p tsconfig.json && node index.js"
