“未定义”类型不能分配给“T”类型

时间:2021-03-21 08:38:46

标签: typescript amazon-s3 aws-cdk

我在 typeScript 中创建了一个地图,即

readonly stageTableMap: Map<string, SecureBucket>;

在这里,我按照以下方式将字符串和 SecureBucket 变量放入映射中。

stageTableMap.set(table, tableBucket);

当我以下列方式从这张地图中检索价值时:-

SecureBucket bucket = stageTableMap.get(table);

这是给错误如下:-

TS2322: Type 'SecureBucket' | undefined is not assignable to type 'SecureBucket'.

当我尝试将 dataType 更改为 SecureBucket | undefined 时,它可以工作,但我想在不更改 dataType 的情况下使用它。

我发现了这个 post ,但它只是指将 dataType 更改为 'SecureBucket |未定义 '.

有人可以帮忙吗。

1 个答案:

答案 0 :(得分:1)

它将是 SecureBucket || undefined 因为它不保证您传递给它的密钥将在您的地图中,如果该密钥不存在于地图中,它会将 undefined 作为默认值抛出。

使用强制转换 stageTableMap.get(table) as SecureBucket 可能会给您错误的安全假设,而实际上如果您在运行时传递代码中不存在的密钥,它将返回 undefined,因此 SecureBucket | undefined更符合你的代码

如果您希望在代码的某处使用 SecureBucket 的返回类型,您希望使用 SecureBucket 的属性,因此在这种情况下,您应该检查密钥是否存在,如果不存在则重新