Освоение универсальных типов TypeScript: подробное руководство для разработчиков

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

  1. Основные универсальные типы:

Самая простая форма универсальных типов в TypeScript — использование синтаксиса угловых скобок <>. Это позволяет вам создать универсальную функцию или класс, который может работать с разными типами. Например:

function identity<T>(arg: T): T {
  return arg;
}
let result = identity<string>("Hello, World!");
console.log(result); // Output: Hello, World!
  1. Вывод типов с помощью универсальных шаблонов:

Система вывода типов TypeScript часто может определить универсальный тип на основе предоставленного аргумента. Это устраняет необходимость явно указывать тип. Например:

let result = identity("Hello, World!");
console.log(result); // Output: Hello, World!
  1. Общие ограничения:

Вы можете наложить ограничения на универсальные типы, используя ключевое слово extends. Это позволяет вам ограничить типы, которые можно использовать с универсальной функцией или классом. Например:

interface Lengthy {
  length: number;
}
function logLength<T extends Lengthy>(arg: T): void {
  console.log(arg.length);
}
logLength("Hello, World!"); // Output: 13
logLength([1, 2, 3, 4, 5]); // Output: 5
  1. Работа с массивами и универсальными типами:

Общие типы особенно полезны при работе с массивами. Вы можете создавать универсальные функции для выполнения операций с массивами элементов разных типов. Например:

function reverse<T>(array: T[]): T[] {
  return array.reverse();
}
let numbers = [1, 2, 3, 4, 5];
let reversedNumbers = reverse(numbers);
console.log(reversedNumbers); // Output: [5, 4, 3, 2, 1]
  1. Полиморфные дженерики:

Полиморфизм позволяет определять универсальные типы, которые могут работать с несколькими типами одновременно. Это достигается за счет использования нескольких параметров типа. Например:

function mergeArrays<T, U>(arr1: T[], arr2: U[]): (T | U)[] {
  return [...arr1, ...arr2];
}
let numbers = [1, 2, 3];
let letters = ["a", "b", "c"];
let merged = mergeArrays(numbers, letters);
console.log(merged); // Output: [1, 2, 3, "a", "b", "c"]

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