打字稿在下面的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)
。我看不到的隐藏问题在哪里?谢谢!
答案 0 :(得分:1)
问题是conn.has(aa)
是JavaScript函数,而conn.get(aa)
type 是TypeScript功能。因此,您不能使用具有来确保 get 不会返回 undefined 值。
您应该在if之后声明get,这将不会使bundle发生任何变化,但会告诉编译器(conn.get(aa)!).to
的值已被检查