Почему TypeScript — это новый стандарт, и где искать лучший код?
Если вы пишете на JavaScript и ещё не перешли на TypeScript, вы теряете время. Серьёзно. TypeScript (или TS) — это не просто «надстройка» над JS. Это строгая типизация, автодополнение, рефакторинг без страха сломать всё и, конечно, открытый исходный код, который можно (и нужно) изучать.
В этой статье мы не будем рассказывать, как установить TypeScript. Вместо этого мы отправимся на GitHub и разберём 7 лучших репозиториев, которые не только покажут красивые решения, но и помогут вам писать более чистый, безопасный и масштабируемый код. Каждый проект — это учебник, написанный реальным кодом.
Что мы ищем в репозиториях?
- Архитектурные паттерны — как построить проект, чтобы его не хотелось удалить через месяц.
- Примеры строгой типизации — где TS проявляет себя на 100%.
- Реальную пользу — библиотеки, которые можно применить прямо сейчас.
Поехали!
1. NestJS — фреймворк для серьёзных приложений
Репозиторий: github.com/nestjs/nest
NestJS — это, пожалуй, самый элегантный фреймворк на TypeScript. Он заимствует идеи из Angular (модули, декораторы, DI) и превращает серверный код в произведение искусства.
Почему стоит изучать:
- Чёткое разделение на модули.
- Встроенная поддержка GraphQL, WebSockets, RabbitMQ.
- Документация — образец для подражания.
Пример кода из репозитория (контроллер и сервис):
// cats.controller.ts
import { Controller, Get, Post, Body } from '@nestjs/common';
import { CatsService } from './cats.service';
import { CreateCatDto } from './dto/create-cat.dto';
import { Cat } from './interfaces/cat.interface';
@Controller('cats')
export class CatsController {
constructor(private catsService: CatsService) {}
@Post()
async create(@Body() createCatDto: CreateCatDto) {
this.catsService.create(createCatDto);
}
@Get()
async findAll(): Promise<Cat[]> {
return this.catsService.findAll();
}
}
Обратите внимание на декораторы @Controller, @Get и строгий интерфейс Cat. Это не просто код — это шаблон, по которому строятся сотни тысяч проектов.
2. Prisma — ORM, который не бесит
Репозиторий: github.com/prisma/prisma
Prisma — это современная ORM (Object-Relational Mapping) для TypeScript и Node.js. Она генерирует типы автоматически на основе вашей схемы базы данных. Это значит, что ошибка типа «поле не существует» отловится на этапе компиляции, а не в рантайме.
Что вынесете: подход «Schema-first» и автогенерация типов.
Пример из документации:
// schema.prisma
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
author User @relation(fields: [authorId], references: [id])
authorId Int
}
// usage.ts
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
const user = await prisma.user.create({
data: {
email: 'alice@prisma.io',
name: 'Alice',
posts: {
create: { title: 'Hello World' },
},
},
});
console.log(user);
}
Prisma — это идеальный пример того, как TypeScript может сделать работу с данными безопасной и быстрой.
3. RxJS — реактивное программирование для смелых
Репозиторий: github.com/ReactiveX/rxjs
RxJS — это библиотека для работы с асинхронными потоками данных. Если вы хотите понять, как работают Observables и операторы вроде map, filter, switchMap — смотрите сюда.
Этот репозиторий — отличный пример того, как писать сложные абстракции на TS с минимальным количеством багов благодаря строгим типам.
Пример:
import { of } from 'rxjs';
import { map, filter } from 'rxjs/operators';
const numbers$ = of(1, 2, 3, 4, 5);
numbers$.pipe(
filter(x => x % 2 === 0),
map(x => x * 10)
).subscribe(console.log); // Output: 20, 40
RxJS учит думать в терминах потоков, а не событий. Это меняет подход к фронтенду и бэкенду.
4. TensorFlow.js — машинное обучение в браузере
Репозиторий: github.com/tensorflow/tfjs
Да, TensorFlow теперь и на TypeScript. Вы можете обучать нейросети прямо в браузере или на Node.js. Репозиторий содержит десятки примеров, от распознавания изображений до генерации текста.
Что изучать: как типизировать сложные математические операции и как строить графы вычислений.
Простой пример:
import * as tf from '@tensorflow/tfjs';
// Создаем простую модель
const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [1]}));
// Компилируем и обучаем
model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});
const xs = tf.tensor2d([1, 2, 3, 4], [4, 1]);
const ys = tf.tensor2d([2, 4, 6, 8], [4, 1]);
model.fit(xs, ys, {epochs: 200}).then(() => {
model.predict(tf.tensor2d([5], [1, 1])).print(); // ~10
});
Этот код — отличный пример того, как TypeScript помогает работать с многомерными массивами и асинхронностью.
5. Vite — сборщик, который не тормозит
Репозиторий: github.com/vitejs/vite
Vite — это современный инструмент сборки от создателя Vue.js. Он написан на TypeScript и использует Rollup под капотом. Главная фишка — скорость. Мгновенный HMR (Hot Module Replacement) и быстрый старт.
Изучая код Vite, вы поймёте, как работать с плаги