web-dev-qa-db-fra.com

Argument de type 'this' non assignable au paramètre 'Construct'

J'essaie d'appeler une fonction lambda dans une pile "exemple d'application" et cela me donne une erreur parce que j'essaie de lui passer un paramètre de "ceci".

Voici ma fonction lambda

export async function handler(event) {
    console.log("request:", JSON.stringify(event, undefined, 2));
    return {
        statusCode: 200,
        headers: { "Content-Type": "text/plain" },
        body: `Hello, CDK! You've hit ${event.path}\n`
    };
};

Voici l'application qui appelle cette fonction

//import sns = require('@aws-cdk/aws-sns');
//import subs = require('@aws-cdk/aws-sns-subscriptions');
//import sqs = require('@aws-cdk/aws-sqs');
import cdk = require('@aws-cdk/core');
import lambda = require('@aws-cdk/aws-lambda');

//Exports class from other file much like a function

export class CdkWorkshopStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { 
    super(scope, id, props);

    // Describes an AWSLambda Resource
    const hello = new lambda.Function (this, 'HelloHandler', {
      runtime: lambda.Runtime.NODEJS_8_10,    //execution environment
      code: lambda.Code.asset('lambda'),   // code loaded from the "lambda" directory
      handler: 'hello.handler'                // file is "hello", function is "handler"
    });
  }
}

L'erreur que j'obtiens est:


lib/cdk-workshop-stack.ts:31:39 - error TS2345: Argument of type 'this' is not assignable to parameter of type 'Construct'.
  Type 'CdkWorkshopStack' is not assignable to type 'Construct'.
    Types of property 'node' are incompatible.
      Type 'import("/Users/aroe/cdk-workshop/node_modules/@aws-cdk/core/lib/construct").ConstructNode' is not assignable to type 'import("/Users/aroe/cdk-workshop/node_modules/@aws-cdk/aws-lambda/node_modules/@aws-cdk/core/lib/construct").ConstructNode'.
        Types have separate declarations of a private property 'Host'.

31     const hello = new lambda.Function(this, 'HelloHandler', {
                                         ~~~~

[1:24:08 PM] Found 1 error. Watching for file changes.

Et enfin j'utilise Node version v13.3.0

4
aroe

La définition de la construction me semble juste. Cette erreur peut se produire si les différents modules cdk ne sont pas tous de la même version; voir L'argument de type 'this' n'est pas assignable au paramètre de type 'Construct' pour un exemple de cela. Essayez d'exécuter npm update; voir si cela résout le problème.

1
Charles Fulton

Cela a été résolu en ignorant simplement l'erreur "this" et en exécutant quand même le lambda. Je ne pense pas que cela aurait fonctionné s'il s'agissait d'un véritable programme node/JS. Cependant, lorsque vous utilisez TypeScript natif de CDK, cela vous donne beaucoup.

0
aroe

J'ai eu la même erreur car la version installée pour @aws-cdk/aws-lambda et @aws-cdk/aws-sns-subscriptions était différent,

tandis que aws-sns-subscriptions a une dépendance sur aws-lambda de la même version.

enter image description here

lorsque j'ai rétrogradé @aws-cdk/aws-lambda version l'erreur a disparu!

vous pouvez également mettre à jour tous les aws-cdk packages pour avoir la même version.

0
Aya Salama