AWS CDK:类型“IKey”上不存在属性“policy”:TypeScript

ssgvzors  于 2023-06-30  发布在  TypeScript
关注(0)|答案(1)|浏览(129)

我正在AWS CDK中创建一个应用程序,该应用程序具有一个KMS IKey,该IKey具有附带PolicyStatement s的IAM策略。我的代码没有将它们附加到PolicyDocument,但是当它返回给我时,它有两个PolicyStatement,它们实际上是相同的,只有一个区别,即主体。
其中一个定义了主体,另一个是{}。AWS的方法hasPrincipal对这两个都返回true,但是当我转到cdk deploy时,它不会接受空对象1。我尝试从PolicyStatement中完全删除主体,但它也不喜欢这样。
我想删除有问题的PolicyStatement,因为两者之间的所有其他参数都相同。但是我需要进入PolicyDocument中iKey的策略声明列表。
当我写代码进入IKey时,定义为:

var secretsKmsKey: IKey = generateEnvKMSKey(scope)

其中包括:

secretsKmsKey.policy['statements']

// or

secretsKmsKey['policy']['statements']

在我的调试器中,它存在,我可以用iKey PolicyDocument做任何我想做的事情。然而,当我转译时,我得到:

Property 'policy' does not exist on type 'IKey'.
26   removeKmsEmptyPrincipalPolicy(secretsKmsKey['policy']['statements'])

debugger showing policy property exists on IKey object
如何进入IKey.policy并使用它?文档和转译器说它不在那里,调试器说它在那里。

aws: aws-cli/2.12.0 Python/3.11.4 Darwin/22.5.0 source/x86_64 prompt/off
cdk: 2.83.1 (build 006b542)
constructs: 10.1.31
typeScript: Version 4.3.2
node: v16.18.1
npm: 8.19.4

已尝试使用以下两种不同的方式访问:

secretsKmsKey.policy['statements']

// or

secretsKmsKey['policy']['statements']

两者都在调试器中工作,而不是在编译器中。
还尝试从PolicyStatement中删除主体。

7d7tgy0s

7d7tgy0s1#

这是因为IKey是Typescript中的一个接口,而这个接口没有定义policy字段,所以Typescript在抱怨。事实上,你的变量实际上是实现这个接口的Key类的示例,TypeScript并不知道。如果你想解决Typescript的问题,你可以将它转换为Key。或者,您可以将方法更改为返回Key而不是IKey,以保持其干净。

相关问题