Написание функции дезинфицирующего средства в Typescript для проверки нулевых, неопределенных и пустых строк и получения ошибки внутри функции - PullRequest
0 голосов
/ 09 апреля 2020

Я пишу обобщенную функцию c в Typescript, чтобы получить строковое значение и проверить, является ли оно нулевым, неопределенным или пустой строкой, и возвращает ли значение null или фактическое значение, возвращающее его обрезанное.

По иронии судьбы я сталкиваюсь с проблемой, заключающейся в том, что внутри функции во второй строке в return stringValue.trim(); я получаю ошибку Object is possibly null or undefined, и я не уверен, какую проверку я могу сделать, чтобы это исправить .

Это моя функция в настоящее время:

  const sanitize = (stringValue: string | undefined | null) => {
    let emptyString = '';
    let nullValue = null;
    let undefinedValue = undefined;

    if(typeof stringValue === emptyString || typeof stringValue === nullValue || typeof stringValue === undefinedValue){
      return null
    } else {
      return stringValue.trim();
    }
  }

Ответы [ 2 ]

2 голосов
/ 09 апреля 2020

Здесь нет необходимости использовать typeof, просто сравните переменные напрямую, чтобы TypeScript знал, что вы уже исключили эти возможные типы, что гарантирует, что stringValue не будет null или undefined:

if(stringValue === '' || stringValue === null || stringValue === undefined)

Или, как упоминалось в @DBS, использовать ложные значения и упростить ваше утверждение до

if (!stringValue)

Если вы хотите, чтобы строки, содержащие только пробельные символы, возвращались как нулевые, вы можете изменить свой оператор возврата на return stringValue.trim() || null, чтобы проверить, становится ли усеченным значение ''

Как и в @DBS, typeof возвращает тип в виде строки. Также typeof для null объекта вернет 'object', а не 'null', что делает это еще менее применимым для этого сценария. В общем, я никогда не нуждался в использовании typeof, за исключением некоторой динамической проверки c ввода

0 голосов
/ 09 апреля 2020

вместо использования дополнительных переменных и повышения читабельности кода, ваша рабочая функция очистки может быть записана как

 const sanitize = (stringValue: string | undefined | null) => {
    if(typeof stringValue === "string"){
        return stringValue.trim();
    } else {
        return null
    }
  }

typeof stringValue вернет string, если тип является строковым, и * Блок 1006 * вернет обрезанную строку. Если тип отличается от строки, мы просто возвращаем null.

Как упоминалось в @DBS, приведенное выше не будет возвращать ноль для пустых строк. Если вы хотите вернуть также пустое значение для пустых строк, используйте следующую версию:

 const sanitize = (stringValue: string | undefined | null) => {
    if(typeof stringValue === "string" && stringValue.trim().length>0){
        return stringValue.trim();
    } else {
        return null
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...