9. Typescript

0.0(0)
studied byStudied by 0 people
learnLearn
examPractice Test
spaced repetitionSpaced Repetition
heart puzzleMatch
flashcardsFlashcards
Card Sorting

1/17

encourage image

There's no tags or description

Looks like no tags are added yet.

Study Analytics
Name
Mastery
Learn
Test
Matching
Spaced

No study sessions yet.

18 Terms

1
New cards

Отличия от JS

1) JS - динамически типизированный язык, а TS - статически типизированный язык.

У динамически типизированных языков есть интерпретатор — программа, которая выполняет код построчно без предварительного анализа.

2) Перед запуском кода в TypeScript на выполнение его нужно скомпилировать. Во время компиляции проверяется, что программа типобезопасна (этот процесс называется транспиляцией). Компилятор это программа, которая выполняет преобразование текста программы в другое представление, обычно машинный код, без его запуска, статически.

3) Строгая типизация - не связана со статической. Она говорит о том, насколько язык допускает автоматические преобразования типов. То есть статический язык может быть нестрогим, и наоборот.

Например, в JavaScript мы можем сложить число со строкой. В TS выдаст ошибку.

2
New cards

Преимущества TS

1) Нахождение некоторых видов ошибок еще до запуска кода

2) Более простой рефакторинг кода

3) Полная поддержка возможностей редактора: автодополнения, навигации по коду и прочее

3
New cards

Анонимная функция, контекстная типизация (contextual typing)

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

Контекстная типизация - это когда контекст определения функции позволяет вывести типы входных параметров без явного указания. В итоге код выглядит идентично коду на JavaScript.

upperWord = words.map((word) => word.toUpperCase());

Если функция определяется вне контекста, то к ней применяются те же правила, что и к именованным функциям. То есть типы параметров должны быть заданы во время определения

4
New cards

Псевдонимы типов (Type Aliases)

это не создание нового типа данных. Это способ сокращенно записать определение типа.

type User = { firstName: string; lastName: string; }

type SomeType = string | number | undefined;

5
New cards

Union types (объединение типов)

const pow = (a: number | bigInt | null)

6
New cards

Пространство имен (Namespace)

Модули решают проблему разнородных сущностей и коллизий с помощью разнесения кода по нескольким файлам. Чтобы коллизии не возникали в рамках одного файла, используют механизм пространств имен namespace

7
New cards

void

это тип функции, который позволяет возвращать любые данные, но делает так, что их использование бессмысленно. Если неявно указать void для функции (например через type alias):

type VoidFunc = () => void;

const f: VoidFunc = () => true;

const V = f();

то мы не можем использовать переменную V для чего-либо, кроме как для присваивания другой переменной с типом void.

Если указать тип void явно, то невозможно будет вернуть какое-либо значение из функции.

8
New cards

never

Тип never используется, когда функция:

1) гарантированно ничего не возвращает (бесконечный цикл)

2) если функция выбрасывает исключение

3) когда функция завершает программу - process.exit(0)

9
New cards

unknown

Главное отличие unknown от any связано с проверкой типов. unknown запрещает выполнять любые операции. Но unknown не отключает проверку типов.

unknown присваивается самому себе или any

any — чему угодно

10
New cards

any

Использование типа any в TypeScript отключает проверки типов, что не желательно.

Также в наиболее строгом режиме с помощью "strict": true в tsconfig.json использование any невозможно. А это значительно повышает безопасность кода.

11
New cards

Type Assertion

Type Assertion — указание компилятору, что мы точно знаем о коде.

const args = [1, 2] as const;

12
New cards

Spread-оператор

Позволяет раскладывать массив на отдельные параметры:

const numbers = [1, 2, 3];

Math.max(...numbers);

Отличие от JS: если функция принимает только два параметра, например sum, то компилятор выдаст ошибку. Можно обойти с помощью Type Assertion точно указав, что объект не изменится.

13
New cards

Перегрузка функций (Function Overloads)

это возможность определить несколько версий одной функции, каждая из которых принимает свой набор параметров. С помощью стрелочной функции можно указать перезагрузку используя type alias.

type Overloaded = {

(a: number, b: number): string;

(a: string, b: string): string;

}

const concat: Overloaded = (a, b) => {...}

14
New cards

Type Narrowing — сужение типа

Это статическая проверка совместимости типов, без запуска кода

function isPresence(value: unknown): boolean {

if (value === null || value === undefined) {

return false;

}

}

15
New cards

Type Guard (защитники типа)

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

typeof - частный случай

function isObject(value: unknown): value is object {

return (typeof value === 'object' ) && (value !== null);

}

16
New cards

Дженерики в применении к функциям

это механизм, позволяющий создать такие функции, которые имеют одинаковую логику обработки для разных типов данных. Иногда такие функции называют обобщенными функциями.

17
New cards

Параметрический полиморфизм

В Computer Science свойство функции, позволяющее обрабатывать значения разных типов одним способом (используя один алгоритм)

18
New cards