Null примитивный null тип

Примитивный тип Null служит обозначением “ничего”.

Тип Null указывается с помощью ключевого слова null (не путать с единственным литеральным значением null типа Null, которое присваивается в качестве значения).

let identifier: null = null; // null, указанный после оператора двоеточия, это имеющийся только в TypeScript псевдоним (alias) для глобального типа Null. В то время как null, указанный после оператора присваивания, это единственное значение типа Null.

Тип Null является подтипом всех типов, за исключением типа Undefined, поэтому его единственное значение null совместимо со всеми остальными типами данных.

class TypeSystem {
  static any: any = null; // Ok
  static number: number = null; // Ok
  static string: string = null; // Ok
  static boolean: boolean = null; // Ok
  static null: null = null; // Ok
}

В то время как тип null совместим со всеми типами, помимо него самого, с ним самим совместим лишь тип undefined и any.

TypeSystem.null = TypeSystem.any; // Ok
TypeSystem.null = TypeSystem.number; // Error
TypeSystem.null = TypeSystem.string; // Error
TypeSystem.null = TypeSystem.boolean; // Error
TypeSystem.null = TypeSystem.null; // Ok

Тогда, когда тип данных указывается не явно, а в качестве значения используется значение null, вывод типов определяет принадлежность к типу any.

let identifier = null; // identifier: any

Создатели TypeScript во избежание ошибок, возникающих при операциях, в которых вместо ожидаемого значения возможно значение null, рекомендуют вести разработку с активным флагом –strictNullChecks. При активном флаге –strictNullChecks тип null является подтипом только одного типа any. Это в свою очередь означает, что значение null может быть совместимо только с типами any и null.

class TypeSystem {
  static any: any = null; // Ok
  static number: number = null; // Error
  static string: string = null; // Error
  static boolean: boolean = null; // Error
  static null: null = null; // Ok
}
 
TypeSystem.null = TypeSystem.any; // Ok
TypeSystem.null = TypeSystem.number; // Error
TypeSystem.null = TypeSystem.string; // Error
TypeSystem.null = TypeSystem.boolean; // Error
TypeSystem.null = TypeSystem.undefined; // Ok

При активном флаге –strictNullChecks, при условии, что в качестве значения выступает значение null, вывод типов определяет принадлежность к типу null.

let identifier = null; // identifier: null

Тип null идентичен по своей работе с одноимённым типом из JavaScript.