TGViewer
Channel Public Channel
Вёрстка сайтов | HTML, CSS, JS

Вёрстка сайтов | HTML, CSS, JS

@free_html_lessons

👋 Привет, друг!

В этом канале я выкладываю структурированные, обучающие уроки и материалы по вёрстке сайтов и фронтенду.
Присоединяйся и начинай учиться!

Связь: @Tigran1963
Subscribers
4.5K
Photos
931
Videos
2
Links
1.4K

Showing posts older than #2798 · Back to latest

Older Posts 20 shown
Post #2797 609
TypeScript: почему не стоит злоупотреблять as

В TypeScript есть удобный инструмент – type assertion, или приведение типа через as.

Например:

const user = getData() as User;


На первый взгляд может показаться, что мы “преобразовали” данные в тип User. Но на самом деле это не так.

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

Иными словами, мы говорим компилятору:
> “Считай, что это User. Я беру ответственность на себя”.

Из-за этого as может скрыть реальную ошибку.

Например:

type User = {
name: string;
age: number;
};
const data = JSON.parse('{"name": "Aram"}') as User;

console.log(data.age.toFixed());


TypeScript не покажет ошибку, потому что мы явно указали тип User. Но в реальных данных поля age нет, поэтому код упадёт во время выполнения.

Поэтому важно помнить: as не делает код безопаснее. Он лишь отключает часть проверки типов в конкретном месте.

Особенно осторожно стоит использовать as, когда данные приходят извне: с сервера, из localStorage, из JSON.parse или из сторонних библиотек.

Более надёжный подход — сначала проверить структуру данных, а уже потом работать с ними как с нужным типом:

function isUser(value: unknown): value is User {
return (
typeof value === 'object' &&
value !== null &&
'name' in value &&
'age' in value
);
}
const data: unknown = JSON.parse(json);
if (isUser(data)) {
console.log(data.age);
}


В этом случае TypeScript понимает, что внутри блока if значение действительно можно считать User.

Использовать его можно, но лучше делать это осознанно. Особенно там, где данные приходят из внешнего источника и могут не соответствовать ожидаемой структуре.
  • 👍 1
Post #2792 723
Подборка лучших постов за прошлую неделю

Лучшие статьи @free_html_lessons:
1. Практическое руководство по JSON в JavaScript
2. GSAP 3
3. CSS Range Slider

Лучшие фронтенд вакансии @job_webdev:
1. TypeScript разработчик
2. HTML-верстальщик
3. HTML-верстальщик

Лучшие дизайн вакансии @job_webdesign:
1. ux/ui дизайнер
2. Web-дизайнер
3. Дизайнер

#лучшеезанеделю
  • ❤ 1
Post #2791 670
Post #2788 697
Post #2787 665
Post #2786 640
Практическое руководство по JSON в JavaScript

Читать 👨‍💻

#js | #полезности
  • 👍 4
Post #2783 714
Intl API: интернационализация в JavaScript

Обычно разработчики форматируют даты и числа «вручную»: конкатенацией строк или костылями. Но у браузеров уже есть встроенный инструмент — Intl API. Он решает задачи интернационализации (i18n) и избавляет от лишних библиотек.

1. Форматирование чисел
const number = 1234567.89;

console.log(new Intl.NumberFormat('de-DE').format(number));
// 1.234.567,89 (немецкий формат)

console.log(new Intl.NumberFormat('en-US').format(number));
// 1,234,567.89 (американский)

📌 Локаль ('de-DE', 'en-US') задаёт стиль записи чисел.

2. Валюта

const price = 1999.99;

const usd = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' });
console.log(usd.format(price)); // $1,999.99

const eur = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' });
console.log(eur.format(price)); // 1.999,99 €


Теперь цены отображаются привычно для пользователей разных стран.

3. Даты и время

const date = new Date();

const us = new Intl.DateTimeFormat('en-US').format(date);
console.log(us); // 8/21/2025

const ru = new Intl.DateTimeFormat('ru-RU', { dateStyle: 'full' }).format(date);
console.log(ru); // четверг, 21 августа 2025 г.


📌 Можно настраивать dateStyle, timeStyle, часовые пояса и даже календари.

4. Сравнение строк

const collator = new Intl.Collator('ru-RU');
console.log(['ёж', 'яблоко', 'арбуз'].sort(collator.compare));
// ['арбуз', 'ёж', 'яблоко']


Без Intl.Collator сортировка могла бы работать неправильно для кириллицы.

Где это полезно?
• Мульти-язычные проекты (сайты, интернет-магазины).
• Корректное отображение цен, дат, валют и чисел для разных стран.
• Локализованная сортировка (например, списки по алфавиту).

#полезности
  • 👍 3
  • ❤ 1
Post #2780 658
Как сделать обводку для текста?

Воспользуемся этим кодом:
<div class="text">Текст с обводкой.</div>


.text {
font-size: 16px;
-webkit-text-stroke: 1px red;
-webkit-text-fill-color: transparent;
}


Данный способ не работает в IE. Для него нам следует задать тексту тени
.text {
font-size: 16px;
color: #fff;
text-shadow:
-0 -1px 0 #000000,
0 -1px 0 #000000,
-0 1px 0 #000000,
0 1px 0 #000000,
-1px -0 0 #000000,
1px -0 0 #000000,
-1px 0 0 #000000,
1px 0 0 #000000,
-1px -1px 0 #000000,
1px -1px 0 #000000,
-1px 1px 0 #000000,
1px 1px 0 #000000,
-1px -1px 0 #000000,
1px -1px 0 #000000,
-1px 1px 0 #000000,
1px 1px 0 #000000;
}


#полезности
  • 👍 4
Post #2778 635
Post #2777 700
Post #2776 635
Подборка лучших постов за прошлую неделю

Лучшие статьи @free_html_lessons:
1. Что такое type и зачем он нужен
2. For...in
3. Анимация скролла с Grid

Лучшие фронтенд вакансии @job_webdev:
1. Frontend-разработчик
2. Frontend-разработчик
3. HTML-верстальщик

Лучшие дизайн вакансии @job_webdesign:
1. Web-дизайнер
2. Продуктовый дизайнер
3. ux/ui designer

#лучшеезанеделю
  • 👍 1
Post #2775 641
Задача: Сделать тип, который делает все свойства объекта необязательными, кроме одного

Есть тип пользователя:

id: number
name: string
email: string
}


Нужно создать тип UpdateUser, который:
• делает все поля необязательными
• но поле id остаётся обязательным

Результат должен быть таким:

id: number
name?: string
email?: string
}


Условие:
Нельзя писать тип вручную.
Нужно использовать утилиты типов TypeScript.

Подсказка:
используй Partial и пересечение типов &

Почему эти задачи полезны:
1. Они встречаются в реальных проектах
например при работе с API или формами
2. Они учат использовать ключевые инструменты TypeScript
keyof, Partial, пересечение типов
3. Это уровень middle-разработчика
не синтаксис, а мышление типами


#домашка
  • 😍 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →