TypeScript-null против undefined

на TypeScript Руководящие Принципы Кодирования государство

использовать неопределено. Не используйте null

только что прочитав еще один статья по ECMAScript, который выступает за null над undefined, мне было интересно, известно ли обоснование Microsoft или команды TypeScript для этого решения?

3 ответов


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

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

class Foo {
  bar: number|undefined;
}

function foo(bar: number|undefined) {}

и

class Foo {
  bar: number|null = null;
}

function foo(bar: number|null = null) {}

кроме того, менее удобно проверять тип null значение во время выполнения, в то время как typeof val === 'undefined' на undefined.

там уместно Правило TSLint, которое решает эту проблему,no-null-keyword.


Я сделал некоторые исследования несколько месяцев назад, и я вышел с тем, что undefined должен быть приоритет с помощью правила tslint "no-null-keyword".

Я попытался изменить мой codebase и у меня были некоторые проблемы. Почему? Потому что я использую API, который возвращает null для пустых полей.

я боролся из-за правила тройного равенства tslint.

if (returnedData === undefined) // will be false because returnedData is null

, которые позволяют вам 2 варианта:

1) добавьте некоторые параметры к вашим тройным равным правила.

"triple-equals": [true, "allow-null-check"] и do If (returnedData == null)

allow-null-проверить разрешить "= = " для null

2) Использовать If (returnedData) вместо этого, но он проверяет, если null / undefined / пустая строка или ноль


зачем использовать null над undefined?

в javascripts объекты являются динамическими без какой-либо информации о типе. для этого:

var person
person.namme

может быть либо опечатка, либо это может быть name собственность. Если вы используете undefined как null, вы не будете знать при отладке, если:

  • переменная/свойство еще не инициализировано, или
  • вы пропустите Введенное имя свойства.

поэтому null предпочтительнее undefined, вы откладываете между:

  • забыл инициализировать свойство и
  • используется неправильное свойство.

что сказал: Typescript набран. при этом следующий код:

var person
person.namme

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

тем не менее, я все еще предпочитаю null над undefined.