Что такое TypeScript и чем он отличается от JavaScript
Программирование • 30 июля 2024 • 5 мин чтения
Что такое TypeScript и чем он отличается от JavaScript
У главного языка фронтенда JavaScript есть улучшенная версия — TypeScript. Рассказываем, как он работает и чем отличается от старой версии.
Язык TypeScript (TS) появился в 2012 году. Его создала компания Microsoft, чтобы расширить возможности JavaScript.
JavaScript — это язык фронтенда, то есть лицевой стороны сайта, которую видят пользователи. Чаще всего его используют в вебе для создания интерактивных страниц — с анимированными элементами, всплывающими сообщениями, блоками для отправки информации.
Язык TypeScript — это доработанная версия JavaScript. Он помогает писать более чистый и безопасный код, так как предупреждает об ошибках ещё до запуска программы.
Научиться писать код для сайтов и веб-приложений можно с нуля на курсе «Фронтенд-разработчик». Студенты смогут освоить TypeScript, JavaScript и другие инструменты фронтенда, решить более 500 задач и сделать 11 проектов для портфолио.
На TypeScript можно писать практически любой код, который доступен и на JavaScript. Вот, например, какие проекты можно создавать с помощью TS:
Язык TypeScript решил многие проблемы JavaScript. Но у него есть и свои недостатки. Разберём подробнее плюсы и минусы.
У TypeScript большое комьюнити: разработчики делятся советами и рабочими кейсами
TypeScript компилируется в JavaScript. Это значит, что код не выполняется напрямую в браузере. Сначала компилятор TypeScript преобразует его в обычный JavaScript. Только после этого он может быть выполнен в браузере или на Node.js — специальном движке, который запускает JavaScript на сервере.
Разберём основные элементы, которые работают в TypeScript. Все составляющие можно найти на официальном сайте: компания Microsoft опубликовала в открытом доступе всю документацию по TypeScript.
Типы переменных | TypeScript позволяет задавать типы для всех структур данных. Например:
|
---|---|
Классы и ООП | TypeScript поддерживает классы с расширенной функциональностью. Например, есть модификаторы, которые управляют внешним доступом к данным — закрывают или открывают его. Всего существует три модификатора:
|
Массивы | В TypeScript массивы работают, как в JavaScript, но к ним можно добавить типизацию — как и для переменных. Например, объявить массив, в котором все элементы имеют один и тот же тип. Для этого используют синтаксис тип[] или Array<тип>. |
Интерфейсы | Определяют, какие имена, свойства может иметь объект. Например: |
Функции | С помощью TypeScript можно описывать типы функций, их параметры и возвращаемые значения, а ещё — создавать функции с неопределённым количеством параметров. |
Модули | Позволяют организовать код в отдельные файлы и импортировать или экспортировать элементы между этими файлами. |
Чтобы TypeScript заработал, его необходимо установить на компьютер. Это можно сделать через Node.js, если скачать пакетный менеджер npm.
Вот что нужно сделать дальше:
Код TypeScript не запустится сам по себе, его нужно скомпилировать в JavaScript
Рассмотрим пошагово, как работает TypeScript, на примере создания приложения со списком дел — to-do list.
1. Создание новой директории. Нужно создать директорию — это каталог, который используется для организации и группировки файлов. Для этого необходимо выполнить команду:
mkdir todo-app
cd todo-app
2. Создание нового npm-проекта. Команда npm init -y создаст файл package.json с базовыми настройками.
3. Установка TypeScript для Node.js. Для этого нужно ввести команду: npm install typescript.
4. Запуск TypeScript-проекта. С помощью команды npx tsc --init можно создать файл tsconfig.json, который используется для настройки компилятора TypeScript.
5. Создание структуры проекта. Вот как выглядит структура файлов:
todo-app/
├── src/
│ ├── index.ts
│ ├── todo.ts
├── tsconfig.json
├── package.json
6. Написание кода. Нужно создать файл todo.ts для модели задачи и управления списком задач. Для этого — открыть файл src/todo.ts и добавить код, который создаст:
// src/todo.ts
// Описание структуры задачи
export interface Todo {
id: number;
task: string;
completed: boolean;
}
// Класс для управления списком задач
export class TodoList {
private todos: Todo[ ] = [ ];
private nextId: number = 1;
// Метод для добавления новой задачи
addTask(task: string): void {
const newTodo: Todo = {
id: this.nextId++,
task: task,
completed: false,
};
this.todos.push(newTodo);
}
// Метод для получения всех задач
getTasks(): Todo[ ] {
return this.todos;
}
}
7. Создание файла index.ts для основного кода приложения. Для этого нужно открыть файл src/index.ts и добавить код, который импортирует класс TodoList из файла todo.ts, создаст экземпляр TodoList, добавит несколько задач и выведет список в консоль.
// src/index.ts
import { TodoList } from './todo';
const todoList = new TodoList();
// Добавление нескольких задач
todoList.addTask("Learn TypeScript");
todoList.addTask("Write a to-do list app");
// Вывод списка задач
console.log("To-Do List:");
todoList.getTasks().forEach(todo => {
console.log(`[${todo.id}] ${todo.task} -
${todo.completed ? "Completed" : "Not Completed"}`);
});
8.Компиляция и запуск проекта. Нужно настроить tsconfig.json для указания на директории. Для этого — открыть файл tsconfig.json и убедиться, что он содержит настройки:
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"rootDir": "./src",
"outDir": "./dist",
"strict": true,
"esModuleInterop": true
}
}
9. Компиляция кода TypeScript. Нужно выполнить команду, которая скомпилирует файлы TypeScript и создаст JavaScript-файлы в директории dist.
npx tsc
10. Запуск скомпилированного приложения. Для этого нужно выполнить команду node dist/index.js.
Появится вывод в консоли:
To-Do List:
[1] Learn TypeScript - Not Completed
[2] Write a to-do list app - Not Completed
Основное отличие TypeScript от JavaScript в том, что он проверяет код и показывает ошибки до запуска программы. Разберём подробнее, в чём ещё разница между этими языками.
В JavaScript динамическая типизация, то есть типы переменных определяются во время выполнения кода — иногда это приводит к ошибкам.
let message = "Hello";
message = 42; // JavaScript допускает здесь число (number), хотя это может привести к ошибкам.
В TypeScript — статическая типизация. Типы данных определяются на этапе написания кода, поэтому ошибки можно обнаружить до запуска.
let message: string = "Hello";
// message = 42; // TypeScript укажет на ошибку, так как переменная должна быть строкой (string).
JavaScript поддерживает классы с ES6 — это стандарт, на котором основан JS. Но в нём нет встроенной поддержки интерфейсов, которые описывают структуру объектов.
class Animal {
constructor(name) {
this.name = name;
}
}
let cat = new Animal("Ozzy");
В TypeScript есть поддержка интерфейсов и расширенные возможности работы с классами — это делает код более структурированным.
interface Animal {
name: string;
sound(): void;
}
class Cat implements Animal {
name: string;
constructor(name: string) {
this.name = name;
}
sound(): void {
console.log("Meow!");
}
}
let cat: Cat = new Cat("Ozzy");
cat.sound(); // Meow!
В случае с JavaScript редакторы кода могут выводить подсказки, но часто сложно понять, какие методы и свойства доступны. При работе с TypeScript редакторы предлагают автодополнения — это ускоряет процесс разработки.
Код JavaScript может быть выполнен напрямую в браузере или Node.js, а код TypeScript нужно сначала скомпилировать в JavaScript.
Это отличие вытекает из предыдущего. В JavaScript ошибки можно обнаружить только при выполнении программ. В TypeScript ошибки подсвечиваются при компиляции, то есть ещё до запуска.
Читать также: