Освоение проверки типов в TypeScript: подробное руководство

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

Метод 1. Использование оператора typeof

Оператор typeof позволяет определить тип переменной во время выполнения. Он возвращает строку, представляющую тип переменной. Вот пример:

const value = 42;
console.log(typeof value); // Output: "number"

Метод 2: использование оператора экземпляра

Оператор instanceof проверяет, является ли объект экземпляром определенного класса или функции-конструктора. Он возвращает логическое значение, указывающее, относится ли объект к указанному типу. Вот пример:

class MyClass {}
const obj = new MyClass();
console.log(obj instanceof MyClass); // Output: true

Метод 3. Использование защиты типа

Защитники типа — это условные операторы, которые сужают тип переменной в блоке кода. Они часто используются в сочетании с операторами typeof или instanceof. Вот пример:

function doSomething(value: number | string) {
  if (typeof value === 'number') {
    // value is treated as a number here
    console.log(value.toFixed(2));
  } else {
    // value is treated as a string here
    console.log(value.toUpperCase());
  }
}

Метод 4. Использование предикатов типов

Предикаты типа — это пользовательские функции, определяющие тип переменной. Они создаются с использованием ключевого слова is, за которым следует аннотация типа. Вот пример:

function isString(value: unknown): value is string {
  return typeof value === 'string';
}
function processValue(value: unknown) {
  if (isString(value)) {
    // value is treated as a string here
    console.log(value.toUpperCase());
  } else {
    console.log('Invalid value');
  }
}

Метод 5. Использование распознаваемых объединений

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

interface Square {
  kind: 'square';
  size: number;
}
interface Circle {
  kind: 'circle';
  radius: number;
}
type Shape = Square | Circle;
function calculateArea(shape: Shape) {
  if (shape.kind === 'square') {
    // shape is treated as a Square here
    return shape.size  2;
  } else {
    // shape is treated as a Circle here
    return Math.PI * shape.radius  2;
  }
}

Метод 6. Использование утверждений типа

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

const value: unknown = 'Hello, TypeScript!';
const length = (value as string).length;
console.log(length); // Output: 20

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