AWS CDK,打字稿-“this”类型的参数不可分配给“Construct”类型的参数

And*_*jic 3 node.js typescript graphql aws-appsync aws-cdk

我有由 cdk cli(typecript-language) 生成的代码:

import { Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as appsync from '@aws-cdk/aws-appsync';

export class BookStoreGraphqlApiStack extends Stack {
    constructor(scope: Construct, id: string, props?: StackProps) {
        super(scope, id, props);

        const api = new appsync.GraphqlApi(this, 'MyApi', {
            name: 'my-book-api',
            schema: appsync.Schema.fromAsset('graphql/schema.graphql')
        });
    }
}

Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Argument of type 'this' is not assignable to parameter of type 'Construct'.
  Type 'BookStoreGraphqlApiStack' is missing the following properties from type 'Construct': onValidate, onPrepare, onSynthesize
Run Code Online (Sandbox Code Playgroud)

我的package.json:

"devDependencies": {
    "@types/jest": "^26.0.10",
    "@types/node": "10.17.27",
    "aws-cdk": "2.2.0",
    "jest": "^26.4.2",
    "ts-jest": "^26.2.0",
    "ts-node": "^9.0.0",
    "typescript": "~3.9.7"
  },
  "dependencies": {
    "@aws-cdk/aws-appsync": "^1.136.0",
    "aws-cdk-lib": "2.2.0",
    "constructs": "^10.0.12",
    "source-map-support": "^0.5.16"
  }
Run Code Online (Sandbox Code Playgroud)

节点版本:v16.13.0

aws-cdk 版本:2.2.0

fed*_*nev 9

您正在混合来自 CDK V1 和 V2 的依赖项,它们是不兼容的。请参阅迁移指南。


[2023 注]:AppSync L2 构造现已稳定并移至aws-cdk-lib. aws-cdk/aws-appsync-alpha不再需要该包。


要获得有效的 V2 设置,请将 AppSync 包更改为import * as appsync from '@aws-cdk/aws-appsync-alpha'. 在 V2 中,alpha API 有单独的包,稳定的 API 位于通用的aws-cdk-lib. AppSync 的 L2 构造属于 alpha 类别。

以下是两个 CDK 版本的导入模式的概述:

// V2
import { Construct } from 'constructs'; // construct is in a separate package
import { Stack, StackProps, aws_s3 as s3 } from 'aws-cdk-lib'; // common package for stable construct
import * as appsync from '@aws-cdk/aws-appsync-alpha'  // alpha constructs in separate packages

// V1 - separate packages core and for each service
import * as cdk from '@aws-cdk/core';
import * as appsync from '@aws-cdk/aws-appsync';
Run Code Online (Sandbox Code Playgroud)

下表显示了在哪里可以找到每个 CDK 版本的依赖项:

包裹 CDK版本 结构体
aws-cdk-lib v2 L1 ( CfnSomething) 构建体和稳定的L2/L3 构建体
@aws-cdk/aws-something-alpha v2 实验性 L2/L3 结构
@aws-cdk/aws-something v1 全部

  • 我遇到了同样的问题,我正在遵循 CDK V1 示例 (https://docs.aws.amazon.com/cdk/latest/guide/serverless_example.html),但我已经安装了 CDK v2,所以我需要遵循CDK V2 示例 (https://docs.aws.amazon.com/cdk/v2/guide/serverless_example.html)。 (2认同)