TypeScript Flashcards

1
Q

Что такое TypeScript?

A

TypeScript - это язык программирования, который расширяет возможности JavaScript, добавляя в него статическую типизацию, интерфейсы и другие возможности.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
1
Q

Основные компоненты TypeScript?

A

Статическая типизация
Интерфейсы
Дженерики
Декораторы

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Основные особенности TypeScript, не связанные с самим кодом?

A
  1. TypeScript является строго типизированным языком программирования, что позволяет выявлять ошибки на этапе компиляции.
  2. TypeScript имеет широкую поддержку в инструментах разработки, библиотеках и поддержку сообщества.
  3. Кроссплатформенный.
  4. TypeScript обеспечивает лучшую читаемость и поддерживаемость.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Минусы использования TypeScript?

A
  1. Дополнительное время на изучение языка и его особенностей.
  2. Необходимость компиляции кода перед запуском, что может замедлить процесс разработки.
  3. Не все библиотеки и фреймворки поддерживают TypeScript.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Особые типы в TypeScript.

A

Встроенные:
- void (отсутствие значения)
- any (любой тип)
- never (тип, который не имеет значений)

Определяемые пользователем:
- enum (перечисление)
- класс
- интерфейс
- tuple (кортеж)
- array (массив)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что такое перечисление (enum)?

A

Тип данных.

Позволяет объявить набор именованных констант.

enum Colors {
  Red = "RED",
  Green = "GREEN",
  Blue = "BLUE"
}

Значения могут быть как строками, так и числами.

Если значение не объявить, то значением будет индекс. Обращение по индексу так же возможно.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Декораторы в TypeScript.

A

По своему назначению - тоже самое что и обычные декораторы.

Могут применяться к классам, методам, свойствам и параметрам.

Применение происходит через вызов декоратора перед декорируемым элементом с помощью @.

@classDecorator
class MyClass { ... }
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Как указать тип переменной, аргумента?

A

Указание типа происходит через :.

const a: number = 1 - переменная

// Обычная функция
function add(a: number, b: number): number {
	return a + b;
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Разница между типом (type) и интерфейсом (interface)?

A

Интерфейс подходит только для сложных сущностей, как объекты.

Интерфейс может (а тип нет):

  1. Реализовываться в классе
  2. Наследоваться другим интерфейсом
  3. Объединение интерфейсов новыми свойствами
  4. Описывать классы и функции
  5. Иметь перегруженные методы
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Поддерживает ли TypeScript перегрузку функций?

A

Да, поддерживает.

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

Перегрузка происходит определением одной и той же функции с разными параметрами.

myFunc(a: string): void
myFunc(a: number): void
myFunc(a: number) { console.log(a) }
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Как TypeScript поддерживает необязательные и дефолтные параметры в функции?

A

Необязательные - ?

func demo(arg1: number, arg2? :number) { … }

Дефолтные - =

func demo(arg1: number, arg2: number = 4) { … }

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Что такое общие типы (generic) в TypeScript?

A

Общие типы позволяют указывать тип в виде переменной. Эта переменная будет определена в момент выполнения.
Тем самым можно запоминать и заставлять использовать один и тот же тип в определённых местах.
Работает с функциями, классами и интерфейсами.
Дженерики могут наследоваться (extends) от интерфейсов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Разница между типами void, never и unknown?

A

void - для функций, которые ничего не возвращают
never - для функций, которые никогда не завершаются (бесконечная или ошибка)
unknown - используется для значений о которых не известно заранее, в отличие от any требует проверки типа перед использованием

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Разница между типами “Объединение” (|) и “Пересечение” (&)?

A

Объединение это логическое “ИЛИ”.

Пересечение это логическое “И”.

Пересечение в основном используется для пересечения объектов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Сужение типов и защитники типов

A

Если есть проверка типа, то происходит сужение типов:

if (typeof val === 'number') { … }

Проверка наличия свойства в объекте:

if ('prop' in obj) { … }

Защитник типа - это функция, которая производит сужение типов. Её можно поставить вместо условия в if.

Ключевая особенность это то что функция является предикатом (true/false), а тип который она возвращает указывается как “аргумент is тип”.

function isAdmin(user: Manager | Admin): user is Admin { // защитник
	return 'role' in user
}

function hello(user: Manager | Admin) {
	if (isAdmin(user)) { // использование защитника
		console.log(user.role) // не будет ошибки
	}
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Utility Type преобразует все свойства типа T в необязательные

A

Partial<T></T>

16
Q

Utility Type преобразует все свойства типа T в обязательные

A

Required<T></T>

17
Q

Utility Type преобразует все свойства типа T в только для чтения

A

Readonly<T></T>

18
Q

Utility Type создает тип объекта с ключами типа K и значениями типа T

A

Record<K, T>

K - тип или объединение типов, который может быть ключом (string, number)

в том числе могут быть строковые литералы ('cat' | 'dog' | 'bird’)

T - любой тип

19
Q

Utility Type создает тип с подмножеством свойств типа T, заданных в K

A

Pick<T, K>

T - может быть любым объектным типом (или их множеством) и не может быть примитивом

K - строковые литералы и обязательно должны быть в T, иначе будет ошибка

20
Q

Utility Type создает тип, исключив из T свойства, указанные в K

A

Omit<T, K>

T - может быть любым объектным типом (или их множеством) и не может быть примитивом

K - строковые литералы и обязательно должны быть в T, иначе будет ошибка

21
Q

Utility Type создает тип, исключив из T те типы, которые также присутствуют в U

A

Exclude<T, U>

Ограничений по T и U нет. Главное что бы в T были значения из U.

22
Q

Utility Type создает тип, который включает только те типы из T, которые также присутствуют в U

A

Extract<T, U>

Ограничений по T и U нет. Главное что бы в T были значения из U.

23
Q

Utility Type создает тип, исключив из T null и undefined

A

NonNullable<T></T>