Skip to content

Instantly share code, notes, and snippets.

View alexkonst's full-sized avatar

Aleksey Konstantinov alexkonst

View GitHub Profile
@alexkonst
alexkonst / 1.ts
Created May 4, 2025 11:37
TS homework 5
// #### Гуард-функции с утиной типизацией
// Создайте гуард-функцию `isGameCharacter` с использованием оператора `is`,
// которая проверяет, является ли объект игровым персонажем по принципам утиной типизации.
// Объект должен иметь свойства `name: string` и метод `move(): string`.
// Используйте эту гуард-функцию в функции processCharacter, которая возвращает
// описание персонажа (например, ` `${name} moves: ${move()}` `) для валидных персонажей
// или `"Not a game character!"` для остальных.
// Пример использования:
@alexkonst
alexkonst / 1.ts
Created May 1, 2025 20:08
TS homework 4
// #### Паттерн Композиция — Система умного дома
// Создайте систему управления умным домом, использующую паттерн Композиция
// для управления различными устройствами (например, свет, термостат).
// Реализуйте класс SmartHome, который содержит коллекцию устройств и предоставляет методы
// для их массового включения, выключения и получения статуса.
// Каждое устройство должно реализовать интерфейс с методами включения, выключения и получения статуса.
// Требования:
@alexkonst
alexkonst / 01.ts
Last active April 21, 2025 19:44
TS homework 3
type User = {
id: number
name: string
email?: string
}
type UserDict = {
[key: User['id']]: User
}
function getUserEmail(id: number, users: UserDict): string | undefined {
@alexkonst
alexkonst / 1.ts
Last active April 21, 2025 20:37
TS homework 2
type Identifier = string | number
// =======
const ReadOperation: symbol = Symbol('Read')
const WriteOperation: symbol = Symbol('Write')
const UpdateOperation: symbol = Symbol('Update')
type Operations = typeof ReadOperation | typeof WriteOperation | typeof UpdateOperation
// =======
@alexkonst
alexkonst / 1.js
Last active April 17, 2025 15:54
/**
* @name Parameters
* @type {object}
* @property {Record<string, string>} [headers] - Request headers
* @property {string|JSON|ArrayBuffer} [body] - Request body
* @property {"json"|"text"|"document"|"buffer"} [contentType] - Content type
*/
/**
* @name ResponseObject
@alexkonst
alexkonst / example.js
Created September 2, 2019 13:17
Listen events on window
[
'drag', 'dragdrop', 'dragend', 'dragenter', 'dragexit', 'draggesture', 'dragleave', 'dragover', 'dragstart', 'drop',
'click', 'dblclick',
'keydown', 'keypress', 'keyup',
'mousedown', 'mouseenter', 'mouseleave', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'mousewheel',
'pointerlockchange', 'pointerlockerror',
'wheel',
'touchcancel', 'touchend', 'touchenter', 'touchleave', 'touchmove', 'touchstart',
'pointerover', 'pointerenter', 'pointerdown', 'pointermove', 'pointerup', 'pointercancel', 'pointerout', 'pointerleave', 'gotpointercapture', 'lostpointercapture',
].forEach(eName => document.addEventListener(eName, e => console.log(e.type)))
@alexkonst
alexkonst / media-events.js
Created February 22, 2019 10:30
All media events as array
// https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events
export const mediaEvents = [
'abort',
'canplay',
'canplaythrough',
'durationchange',
'emptied',
// 'encrypted',
'ended',