受保护的地图访问的打字稿错误TS2532

时间:2019-03-11 09:23:27

标签: typescript

打字稿在下面的conn.get(aa)都标记为TS2532错误。但是这两种访问都受到if(conn.has(aa))的保护,因此我推断get是有效的并且不是未定义的。

const conn: Map<string, {from: string[]; to: string[]}> = new Map();
const aa = "aa";
if(conn.has(aa)) conn.get(aa).to.push("bb");

conn.set("aa", {from: [], to: []});
if(conn.has(aa)) conn.get(aa).to.push("bb");

即使我这样测试存在性:

if(conn.has(aa) && conn.get(aa)) conn.get(aa).to.push("bb");

打字稿抱怨conn.get(aa)。我看不到的隐藏问题在哪里?谢谢!

1 个答案:

答案 0 :(得分:1)

问题是conn.has(aa)是JavaScript函数,而conn.get(aa) type 是TypeScript功能。因此,您不能使用具有来确保 get 不会返回 undefined 值。

您应该在if之后声明get,这将不会使bundle发生任何变化,但会告诉编译器(conn.get(aa)!).to的值已被检查