Ошибка «Объект может быть неопределен» даже после проверки - PullRequest
1 голос
/ 13 мая 2019

Я получаю ошибку при доступе к свойству length. Я понимаю, что мог бы решить эту проблему, только однажды получив объект, а затем выполнив проверку undefined. Или просто добавьте !. Но я хочу понять, почему это происходит, и выяснить, есть ли более хорошее решение. Вот надуманный пример:

type MyMap<K extends string> = { [key in K]: string|undefined }

const getValueLength = (tmp:MyMap<string>, key:string) => {
  return tmp[key] !== undefined && tmp[key].length
}

Я запускаю машинописный текст 3.3 в строгом режиме.

Вот аналогичный вопрос , где проблема заключалась в том, что проверка была сделана внутри другой функции, здесь это не проблема.

1 Ответ

1 голос
/ 13 мая 2019

Доступ к ключу рассматривается как вызов функции, который потенциально может изменить объект / значение, на которое вы смотрите, поэтому нет гарантии, что первый и второй вызовы tmp[key] обнаружат одно и то же.

Чтобы избежать этого, убедитесь, что вы звоните только один раз:

type MyMap<K extends string> = { [key in K]: string | undefined };

const getValueLength = (tmp: MyMap<string>, key: string) => {
  const str = tmp[key];
  return str !== undefined && str.length;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...