Объект, возможно, равен нулю даже при значении параметра по умолчанию

#typescript

Вопрос:

У меня есть эта простая функция, которая берет строку и возвращает ее в регистре заголовка:

 const toTitleCase = (str: string = 'test'): string => {
  const regex = /^[a-z]{0,1}|sw/gi;

  str = str.toLowerCase();

  str!.match(regex).forEach((char) => {
    str = str.replace(char, char.toUpperCase());
  });

  return str;
};
 

Даже с ! помощью in str!.match , а также значения по умолчанию для параметра я получаю ошибку «Объект, возможно, равен нулю» из TSC в этой строке. Что это дает?

Комментарии:

1. если совпадение не удается, то str.match() возвращается значение null, и вызов .forEach этого параметра недействителен.

Ответ №1:

часть, которая, возможно, равна null str.match(regex) , так как, если регулярное выражение не находит совпадений, оно возвращает null вместо пустого списка, поэтому вы, вероятно, захотите это сделать:

 (str.match(regex) ?? []).forEach(...)
 

Это указывает на то, что если совпадение undefined или null затем используется пустой список, хотя ваше регулярное выражение настроено так, чтобы оно всегда совпадало с началом строки, поэтому вместо этого вы можете просто использовать утверждение:

 str.match(regex)!.forEach(...)