Je tente d'utiliser Typescript pour mon AWS Lambda et je reçois les erreurs suivantes partout où j'utilise des promesses.
erreur TS2693 : 'Promise' ne fait référence qu'à un type, mais est utilisé comme une valeur ici.
J'ai essayé d'utiliser les variations suivantes dans le code
Utilisation du constructeur Promise
responsePromise = new Promise((resolve, reject) => {
return reject(new Error(`les données nécessaires sont manquantes`))
})
utilisation de Promise.reject
responsePromise = Promise.reject(new Error(`méthode non supportée "${request.httpMethod}"`));
Versions
Voici les versions de mes dépendances de développement :
"typescript" : "^2.2.2"
"@types/aws-lambda" : "0.0.9",
"@types/core-js" : "^0.9.40",
"@types/node" : "^7.0.12",
Contenu 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"
]
}
J'utilise grunt-ts avec la configuration suivante pour exécuter la tâche ts.
ts: {
app: {
tsconfig: {
tsconfig : "./tsconfig.json",
ignoreSettings : true
}
},
...
J'ai essayé la solution mentionnée dans Je reçois : [ts] 'Promise' ne fait référence qu'à un type, mais est utilisé comme une valeur ici mais sans succès.
1 votes
Aucune valeur de retour n'est nécessaire pour la fonction de rappel passée au constructeur de Promesses. Il suffit de se débarrasser de
return
.0 votes
Voici la traduction en français en conservant les balises HTML si elles existent : Veux-tu dire quelque chose comme ceci ?
responsePromise = new Promise((resolve, reject) => { reject(new Error("données manquantes"))})
J'ai essayé mais cela n'a pas aidé avec le problème.0 votes
Oui. JavaScript se moque de savoir si vous retournez une valeur ou non, mais il n'y prêtera pas attention. En revanche, TypeScript y prêtera attention.
0 votes
Got it. Mais pourquoi est-ce que tsc échoue à compiler n'importe quelle variante de Promose.resolve ou Promise.reject?
0 votes
Je ne sais pas. Comment exactement est déclaré
responsePromise
?0 votes
@Pointy J'ai essayé de définir comme ça.
let responsePromise: Promise | Promise | Promise = Promise.reject('Erreur inconnue');
. mais cela n'a pas aidé.0 votes
noEmit
? typescriptlang.org/docs/handbook/compiler-options.html0 votes
Pointu, si la fonction doit renvoyer une valeur, le mot-clé 'return' est certainement requis. Je rencontre également ce problème, et cela concerne certainement le fait que TypeScript a des problèmes pour gérer correctement l'objet Promise, et n'a rien à voir avec le fait que kalyanvgopal aurait tort car son code est correct.
0 votes
À ceux qui essaient l'une des réponses ci-dessous et ne trouvent pas de chance, assurez-vous que votre
tsconfig.json
est dans le bon répertoire! le mien était dans un répertoire en dessous du fichier qui me donnait l'erreur ts2693.