import type синтаксис

Тренажер по TypeScript для пользователей с начальным уровнем подготовки.

Тренажер по TypeScript

В современном TypeScript существует специальный синтаксис import type. Он указывает компилятору, что импортируемая сущность нужна только для проверки типов и не должна попадать в итоговый JavaScript-код.

Это полезно для оптимизации: такие импорты полностью стираются при сборке (erase-only imports). Это помогает избежать циклических зависимостей, уменьшает размер бандла и ускоряет компиляцию, так как сборщикам не нужно анализировать эти файлы как исполняемый код.

Синтаксис: import type { User } from './User'; или import { type User } from './User';.

Список тем

1. Добавление type

id: 40761_import_type_01_replace

В этом задании вам нужно исправить строку импорта в TypeScript коде. В текущем фрагменте импортируется интерфейс User, но пропущено ключевое слово 'type', которое необходимо для type-only импорта. Ваша задача — вставить пропущенное ключевое слово в указанное место, чтобы импорт корректно работал и соответствовал синтаксису TypeScript для импорта только типов, обеспечивая оптимальную компиляцию и избегая ненужных включений значений.

Заполните пропуски
// Импортируйте только тип интерфейса User
import input1S { User } from './models';

const user: User = { name: 'Alice' };
console.log(user.name);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Значения vs Типы

id: 40761_import_type_02_sort

В этом задании вам нужно распределить различные сущности TypeScript по двум категориям в зависимости от их использования: можно ли их применять как значения во время выполнения (runtime) или они служат только как типы на этапе компиляции (compile time). Обратите внимание, что классы и функции могут быть инстанциированы или вызваны, тогда как интерфейсы и псевдонимы типов используются исключительно для аннотаций типов и не имеют представления в скомпилированном JavaScript коде. Перетащите каждый элемент в соответствующую корзину.

Перетяните элементы в соответствующие блоки
Можно использовать как значение (runtime)
Только как тип (compile time)
class Car { drive() {} }
function add(a: number, b: number) { return a + b; }
interface Animal { name: string; }
type Color = 'red' | 'blue';
class Person { constructor(public name: string) {} }
function log(message: string) { console.log(message); }
interface Config { path: string; }
type Result<T> = { data: T; };
Сообщения
Проверить
Показать подсказку

3. Использование типа как значения

id: 40761_import_type_03_error

В этом фрагменте TypeScript-кода допущена ошибка, связанная с использованием import type. Класс импортирован только как тип, но в коде предпринимается попытка создать его экземпляр с помощью new. Найдите строку с ошибкой и исправьте её, чтобы код стал рабочим.

Найдите ошибку и исправьте
import type { User } from './models';
 
function createUser(name: string, age: number): User {
    const user = new User(name, age);
    return user;
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Выбор вида импорта

id: 40761_import_type_04_select

В данном фрагменте кода TypeScript необходимо импортировать функцию-утилиту и интерфейс из внешних модулей. Для каждого импорта выберите подходящий синтаксис: обычный `import` или `import type`. Учтите, что функция используется как значение (вызывается в коде), а интерфейс — только как тип для аннотации. Заполните пропуски, выбирая варианты из выпадающих списков.

Нужно правильно расставить в пропуски предложенные варианты
// Импортируем функцию-утилиту и интерфейс
input1S { formatDate } from './date-utils';
input2S { UserProfile } from './types';

const profile: UserProfile = {
  name: 'Alice',
  lastLogin: new Date(),
};

console.log(formatDate(profile.lastLogin));
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Безопасный импорт

id: 40761_import_type_05_build

Из предложенных строк соберите корректный TypeScript код, который импортирует тип Config из модуля './types' с использованием синтаксиса import type и объявляет переменную config этого типа. Игнорируйте лишние строки, которые не соответствуют требованию безопасного импорта типов.

Перетяните в правильном порядке строки из одного блока в другой
import type { Config } from './types';
const config: Config = { port: 3000 };
import { Config } from './types';
const config = { port: 3000 };
import type { Database } from './db';
export type { Config };
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Анализ импортов

id: 40761_import_type_06_highlight

Разметьте в приведённых строках импорта TypeScript те части, которые явно помечены как type. Выделите ключевое слово `type`, имена типов, которые импортируются как типы, а также имена, которые импортируются не как типы (например, функции или переменные). Используйте доступные типы: 'Ключевое слово type', 'Имя типа', 'Имя не-типа'.

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
import {{type~|~t1}} { {{User~|~t2}}, {{Account~|~t3}} } from './types';
import { {{type~|~t4}} {{Post~|~t5}}, {{createPost~|~t6}} } from './api';
import { {{type~|~t7}} default as {{MyType~|~t8}}, {{myFunction~|~t9}} } from './module';
import { {{myValue~|~t10}}, {{type~|~t11}} {{MyInterface~|~t12}} } from './lib';
Имя типа
Ключевое слово type
Имя не-типа
Сообщения
Проверить
Показать подсказку

TypeScript: компиляция и запуск

id: 40761_compiler
TS
Запустить тренажёр (TypeScript)
НайтиКурс.Ру