Обработка null> = 0 в Typescript - PullRequest
0 голосов
/ 20 июня 2020

У меня есть простая проверка, где я хочу проверить, является ли данная переменная> = 0.

public print(value: any): void {
    if(value >= 0) {
      console.log('Greater than zero')
    }
  }

Уловка здесь в том, что когда входящая переменная имеет значение null, тогда она станет правдивой и войдет в заявление. Есть ли чистый способ избежать этого, но не добавлять дополнительные проверки?

Ответы [ 3 ]

1 голос
/ 21 июня 2020

Если ваша кодовая база не позволяет использовать null, просто используйте undefined и используйте неявное преобразование, например:

public print(value: any): void {
    if(value != undefined && value >= 0) {
        console.log('Greater than zero')
    }
}

Это работает, потому что null == undefined (двойное равно создает преобразование типа, а тройное равенство - нет).

1 голос
/ 20 июня 2020

Я не понимаю, почему вы не хотите добавлять нулевую проверку.

Альтернативой является использование number вместо any, но это будет работать, только если ваш ts.conf разрешает строгие проверки на null.

function print(value: number): void {
    if(value >= 0) {
      console.log('Greater than zero')
    }
}

print(null) // won't compile with strict null checks
0 голосов
/ 21 июня 2020

Вы можете использовать охранник типа , который будет гарантировать компилятору, что вы обрабатываете не null, а число. Более того, это сделает код более правильным , поскольку с value: any это означает, что вы можете получить логическое значение или строку, переданную в:

public print(value: any): void {
  if (typeof value === "number") {
    //value is definitely a number and not null
    if (value >= 0) {
      console.log('Greater than zero')
    }
  }
}

Playground Link

Теперь код специально проверяет, действительно ли вы получили число, а затем проверяет, больше ли оно или равно нулю. Это означает, что null или нечисловое значение не будут обрабатываться.

Условие защиты типа может быть объединено с другим для краткости:

public print(value: any): void {
  if (typeof value === "number" && value >= 0) {
    console.log('Greater than zero')
  }
}

Playground Ссылка

Или извлечена сама по себе, чтобы уменьшить вложенность:

public print(value: any): void {
  if (typeof value !== "number")
    return;

  //value is definitely a number and not null
  if (value >= 0) {
    console.log('Greater than zero')
  }
}

Ссылка на игровую площадку

...