В этой главе мы узнаем об интерфейсах и модулях в TypeScript.

Интерфейсы

Интерфейс — это способ определить контракт в вашем коде. Он определяет структуру и типы свойств и методов, которые должен иметь класс или объект. Это позволяет вам писать более многоразовый и типобезопасный код.

Допустим, у нас есть функция, которая принимает объект со свойством name:

function sayHello(person: { name: string }) {
  console.log(`Hello, ${person.name}!`);
}

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

interface Person {
  name: string;
}

function sayHello(person: Person) {
  console.log(`Hello, ${person.name}!`);
}

Теперь мы определили интерфейс Person со свойством name и используем его как тип параметра в функции sayHello. Таким образом, мы можем передать любой объект со свойством name, а TypeScript гарантирует, что функция работает только с объектами, которые соответствуют интерфейсу Person.

Модули

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

Допустим, у нас есть файл math.ts, который экспортирует некоторые функции, связанные с математикой:

export function add(a: number, b: number) {
  return a + b;
}

export function subtract(a: number, b: number) {
  return a - b;
}

Чтобы использовать эти функции в другом файле, нам нужно их импортировать:

import { add, subtract } from './math';

console.log(add(2, 3)); // 5
console.log(subtract(5, 2)); // 3

В этом примере мы импортируем функции add и subtract из файла math.ts с помощью оператора import. Затем мы можем использовать эти функции в нашем коде.

Вы также можете использовать оператор export default для экспорта значения по умолчанию из модуля:

export default function sayHello(name: string) {
  console.log(`Hello, ${name}!`);
}

Чтобы импортировать значение по умолчанию, вы можете использовать оператор import без фигурных скобок:

import sayHello from './greetings';

sayHello('John'); // Hello, John

В этом примере мы экспортируем функцию sayHello в качестве значения модуля по умолчанию и импортируем ее с помощью оператора import без фигурных скобок.