TypeScript — это строго типизированный язык программирования, являющийся надмножеством JavaScript. Он предлагает несколько функций, которые делают его популярным выбором среди разработчиков. Однако есть некоторые неочевидные вещи, которые разработчики должны знать о TypeScript, чтобы в полной мере использовать его возможности.

Утверждения типа

Утверждения типов позволяют разработчикам переопределять систему вывода типов по умолчанию в TypeScript. Они используются, когда разработчик знает о типе значения больше, чем может вывести TypeScript. Утверждения типа записываются в виде значения или значения как Type.

let message: unknown = "hello world";

let myString: string = <string> myVariable;

Необязательная цепочка

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

let myObj = {
    property1: {
        property2: {
            property3: "hello world"
        }
    }
}

// без необязательной цепочки
let myString = myObj.property1.property2.property3; // Error: Cannot read property 'property2' of undefined

// с необязательной цепочкаю
let myString = myObj?.property1?.property2?.property3; // Вернет "hello world"

Защита типа

Защита типа — это способ сузить тип переменной до более конкретного типа. Они используются для проверки типа переменной во время выполнения и принятия решений на основе результата.

interface MyInterface {
    myProperty: string
}

function myFunction(myParam: unknown) {
// Введите Guard, чтобы проверить, относится ли myParam к типу MyInterface.
  if ((myParam as MyInterface).myProperty) {
  console.log((myParam as MyInterface).myProperty);
  }
}

Типы пересечений

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

interface MyInterface1 {
    myProperty1: string
}

interface MyInterface2 {
  myProperty2: number
}

// Создание нового типа со всеми свойствами MyInterface1 и MyInterface2
type MyNewType = MyInterface1 & MyInterface2;

let myVariable: MyNewType = {
  myProperty1: "hello",
  myProperty2: 123
}

Пользовательские типы

Это дополнение к глобальным типам в typescript добавит вашему коду больше изящности.

declare type Nullable<T> = T | null; 
declare type NullableString = Nullable<string>;
declare type NullableNumber = Nullable<number>;
declare type NullableDate = Nullable<Date>;
declare type NullableBollean = Nullable<boolean>;

Пример использования

interface User {
  name: NullableString;
  age: NullableNumber;
  address: NullableString;
  updatedAt: NullableDate;
}

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