Lint, почему бы не разрешить присваивать нуль - PullRequest
0 голосов
/ 05 октября 2018

Я слежу за этим quide , но я решил не отключать настройки TSLint по умолчанию.Однако, возможно, я должен был это сделать, потому что сейчас он выдает мне сообщение об ошибке, когда я пытаюсь присвоить значение null (любому типу):

function f()
{
    const a :string = null; //Type 'null' is not assignable to type 'string'
    return a;
}

f();

То же самое для числа.У меня вопрос, почему TSLint решил полностью отключить такие конструкции.Кроме того, это нормально, если вместо этого я вместо этого назначу пустую строку:

    const a :string = "";

1 Ответ

0 голосов
/ 05 октября 2018

Это не ошибка TSLint - это результат вашего tsconfig.json файла с включенной настройкой strictNullChecks.Это делает null недопустимым значением для всех типов, которые явно не утверждают, что они могут быть нулевыми.

Вот пример того, как отличается поведение ( ссылка на игровую площадку ):

let a: string = null;         // This fails with strictNullChecks
let b: string | null = null;  // This does not

Это означает, что если у вас отключена настройка, каждый Type фактически обрабатывается так, как если бы он был Type | null | undefined под капотом!

Итак, почему вы можете захотеть включить функциюкак это на?На первый взгляд это кажется неудобным, но преимущество заключается в том, что он позволяет вам отлавливать ошибки нулевого указателя во время компиляции, а не во время выполнения.

Рассмотрим следующую функцию ( детская площадка ):

function parseCSV(input: string): string[] {
    return input.split(","); // If input is null, this will error!
}

Если strictNullChecks отключено, вы можете позвонить parseCSV(null), и вы не получите сообщение об ошибке, пока не выполните код.Если эта опция включена, передача в null приведет к ошибке компиляции!

В идеальном мире (по крайней мере, на мой взгляд!) Это будет по умолчанию, но из-за того, что в существующем большом количестве JavaScript-кода выбрасывается null / undefinedс опрометчивым отказом было решено, что установка должна быть выбрана для совместимости.Если это поведение нежелательно для вас по какой-либо причине, вы можете изменить этот параметр на false или удалить его из файла конфигурации, чтобы восстановить настройки по умолчанию.

...