web-dev-qa-db-ja.com

タイプ「this」の引数は、パラメータ「Construct」に割り当てることができません

「サンプルアプリ」スタックにラムダ関数を呼び出そうとしていますが、「this」のパラメーターを渡そうとしているため、エラーが発生します。

これが私のラムダ関数です

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`
    };
};

これがその関数を呼び出す「アプリ」です

//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"
    });
  }
}

私が得ているエラーは:


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.

最後に、Nodeバージョンv13.3.0を使用しています。

4
aroe

構成定義は私には正しいように見えます。このエラーは、さまざまなcdkモジュールがすべて同じバージョンでない場合に発生する可能性があります。その一例については、 タイプ 'this'の引数はタイプ 'Construct'のパラメーターに割り当てることができません を参照してください。実行してみてくださいnpm update;それで問題が解決するかどうかを確認します。

1
Charles Fulton

これは、「this」エラーを無視してラムダを実行することで解決しました。それが実際のノード/ JSプログラムであった場合、うまくいったとは思えません。ただし、CDKネイティブTypeScriptを使用すると、多くのことがわかります。

0
aroe

@aws-cdk/aws-lambda@aws-cdk/aws-sns-subscriptionsのインストール済みバージョンが異なるため、同じエラーが発生しました。

一方、aws-sns-subscriptionsは同じバージョンのaws-lambdaに依存しています。

enter image description here

@aws-cdk/aws-lambdaバージョンをダウングレードするとエラーが発生しなくなりました!

すべてのaws-cdkパッケージを同じバージョンに更新することもできます。

0
Aya Salama