1/17
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced |
---|
No study sessions yet.
Отличия от JS
1) JS - динамически типизированный язык, а TS - статически типизированный язык.
У динамически типизированных языков есть интерпретатор — программа, которая выполняет код построчно без предварительного анализа.
2) Перед запуском кода в TypeScript на выполнение его нужно скомпилировать. Во время компиляции проверяется, что программа типобезопасна (этот процесс называется транспиляцией). Компилятор это программа, которая выполняет преобразование текста программы в другое представление, обычно машинный код, без его запуска, статически.
3) Строгая типизация - не связана со статической. Она говорит о том, насколько язык допускает автоматические преобразования типов. То есть статический язык может быть нестрогим, и наоборот.
Например, в JavaScript мы можем сложить число со строкой. В TS выдаст ошибку.
Преимущества TS
1) Нахождение некоторых видов ошибок еще до запуска кода
2) Более простой рефакторинг кода
3) Полная поддержка возможностей редактора: автодополнения, навигации по коду и прочее
Анонимная функция, контекстная типизация (contextual typing)
Анонимная функция - это функция не имеющая имени, обычно используется в том же месте, где и определяется.
Контекстная типизация - это когда контекст определения функции позволяет вывести типы входных параметров без явного указания. В итоге код выглядит идентично коду на JavaScript.
upperWord = words.map((word) => word.toUpperCase());
Если функция определяется вне контекста, то к ней применяются те же правила, что и к именованным функциям. То есть типы параметров должны быть заданы во время определения
Псевдонимы типов (Type Aliases)
это не создание нового типа данных. Это способ сокращенно записать определение типа.
type User = { firstName: string; lastName: string; }
type SomeType = string | number | undefined;
Union types (объединение типов)
const pow = (a: number | bigInt | null)
Пространство имен (Namespace)
Модули решают проблему разнородных сущностей и коллизий с помощью разнесения кода по нескольким файлам. Чтобы коллизии не возникали в рамках одного файла, используют механизм пространств имен namespace
void
это тип функции, который позволяет возвращать любые данные, но делает так, что их использование бессмысленно. Если неявно указать void для функции (например через type alias):
type VoidFunc = () => void;
const f: VoidFunc = () => true;
const V = f();
то мы не можем использовать переменную V для чего-либо, кроме как для присваивания другой переменной с типом void.
Если указать тип void явно, то невозможно будет вернуть какое-либо значение из функции.
never
Тип never используется, когда функция:
1) гарантированно ничего не возвращает (бесконечный цикл)
2) если функция выбрасывает исключение
3) когда функция завершает программу - process.exit(0)
unknown
Главное отличие unknown от any связано с проверкой типов. unknown запрещает выполнять любые операции. Но unknown не отключает проверку типов.
unknown присваивается самому себе или any
any — чему угодно
any
Использование типа any в TypeScript отключает проверки типов, что не желательно.
Также в наиболее строгом режиме с помощью "strict": true в tsconfig.json использование any невозможно. А это значительно повышает безопасность кода.
Type Assertion
Type Assertion — указание компилятору, что мы точно знаем о коде.
const args = [1, 2] as const;
Spread-оператор
Позволяет раскладывать массив на отдельные параметры:
const numbers = [1, 2, 3];
Math.max(...numbers);
Отличие от JS: если функция принимает только два параметра, например sum, то компилятор выдаст ошибку. Можно обойти с помощью Type Assertion точно указав, что объект не изменится.
Перегрузка функций (Function Overloads)
это возможность определить несколько версий одной функции, каждая из которых принимает свой набор параметров. С помощью стрелочной функции можно указать перезагрузку используя type alias.
type Overloaded = {
(a: number, b: number): string;
(a: string, b: string): string;
}
const concat: Overloaded = (a, b) => {...}
Type Narrowing — сужение типа
Это статическая проверка совместимости типов, без запуска кода
function isPresence(value: unknown): boolean {
if (value === null || value === undefined) {
return false;
}
}
Type Guard (защитники типа)
обычные функции, возвращающие логическое значение, принимающие тип и сообщающие TypeScript, можно ли его сузить до чего-то более конкретного.
typeof - частный случай
function isObject(value: unknown): value is object {
return (typeof value === 'object' ) && (value !== null);
}
Дженерики в применении к функциям
это механизм, позволяющий создать такие функции, которые имеют одинаковую логику обработки для разных типов данных. Иногда такие функции называют обобщенными функциями.
Параметрический полиморфизм
В Computer Science свойство функции, позволяющее обрабатывать значения разных типов одним способом (используя один алгоритм)