#typescript
#typescript
Вопрос:
Typescript помечает как ошибку TS2532 оба conn.get(aa)
ниже. Но оба доступа защищены, 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) amp;amp; conn.get(aa)) conn.get(aa).to.push("bb");
typescript выдает ошибку на conn.get(aa)
. Где скрытая проблема, которую я не вижу? Спасибо!
Комментарии:
1. Что ж, без тщательной проверки с помощью
has(key)
это, похоже, соответствует потоку управления typescript:const getaa = conn.get(aa); if(getaa) getaa.to.push("bb");
Это приемлемое решение?
Ответ №1:
Проблема в том, что conn.has(aa)
это функция javascript, а conn.get(aa)
type — функция TypeScript. Поэтому вы не можете использовать has, чтобы гарантировать, что get вернет не неопределенное значение.
Вы должны указать get после if, это не внесло бы изменений в пакет, но сообщило бы компилятору, что значение было проверено (conn.get(aa)!).to
Комментарии:
1. Теперь понятно! Я думал о какой-то связи между has и get. Таким образом, дружественное ‘!’ или проверка непосредственно get являются решением. Спасибо!