Utility Type Partial — это встроенный тип TypeScript, который делает все свойства переданного типа T необязательными. Он полезен, когда вам нужно создать объект на основе какого-то интерфейса, но заполнять все поля сразу не требуется.
Синтаксис: type PartialUser = Partial. Теперь все поля из User в PartialUser будут иметь модификатор ?. Это часто используется в функциях обновления, где нужно передать только изменённые поля, или при инициализации объекта по частям.
Изучение TypeScript, включая такие utility types, делает ваш код более типобезопасным и выразительным. Наш онлайн тренажер с интерактивными заданиями поможет закрепить тему на практике без скучной теории.
- Модуль 1: Введение в TypeScript
- Модуль 2: Примитивные типы
- Модуль 3: Специальные типы
- Модуль 4: Массивы
- Модуль 5: Кортежи (Tuples)
- Модуль 6: Объекты
- Модуль 7: Функции
- Модуль 8: Union типы
- Модуль 9: Литеральные типы
- Модуль 10: Type Aliases
- Модуль 11: Интерфейсы
- Модуль 12: Type Guards и Narrowing
- Модуль 13: Enums
- Модуль 14: Классы
- Модуль 15: Generics — основы
- Модуль 16: Generics — ограничения
- Модуль 17: Utility Types — базовые
- Модуль 18: Utility Types — работа с Union
- Модуль 19: Utility Types — функции
- Модуль 20: Type Assertions
- Модуль 21: Keyof и Typeof операторы
- Модуль 22: Mapped Types
- Модуль 23: Conditional Types
- Модуль 24: Discriminated Unions
- Модуль 25: Модули и типы
- Модуль 26: Declaration Files
- Модуль 27: Типизация асинхронного кода
- Модуль 28: Практические паттерны
1. Определение типа
В этом задании представлены три сценария использования utility types в TypeScript. Для каждого описания выберите из выпадающего списка подходящий utility type, который лучше всего соответствует заданной ситуации. Обратите внимание на то, как каждый тип преобразует свойства исходного интерфейса или типа.
1. У вас есть интерфейс User с обязательными полями. Вам нужно создать функцию обновления, которая принимает объект с необязательными полями, чтобы можно было обновлять только часть данных пользователя. Какой utility type следует использовать для типа параметра этой функции? — input1S
2. Вы хотите гарантировать, что при создании нового объекта конфигурации все поля, определённые в интерфейсе Config, будут переданы. Однако в самом интерфейсе некоторые поля помечены как необязательные. Какой utility type превратит все свойства в обязательные? — input2S
3. Вам нужно создать тип для объекта, который будет использоваться только для чтения — его поля нельзя изменять после инициализации. Какой utility type сделает все свойства readonly? — input3S
2. Синтаксис Partial
Дополните фрагмент кода на TypeScript, чтобы создать Partial-версию интерфейса User. Partial — это утилитарный тип, который делает все свойства переданного типа необязательными. В коде пропущены ключевые элементы синтаксиса: название типа и угловые скобки. Заполните пропуски так, чтобы переменная partialUser имела тип Partial
interface User {
id: number;
name: string;
email: string;
}
// Создаём Partial-версию пользователя
const partialUser: input1S input2S = {
name: "Alice"
};3. Исправление ошибки
В этом фрагменте TypeScript-кода допущена ошибка, связанная с использованием utility-типа Partial. Разработчик пытается присвоить переменной с обязательными полями объект, где эти поля могут отсутствовать. Найдите и исправьте одну ошибку в строке с присваиванием или объявлении типа, чтобы код стал корректным.
interface User { name: string; age: number;} let user: User;let partialUser: Partial<User> = { name: 'Alice' };user = partialUser;4. Сопоставление свойств
В левой колонке приведены интерфейсы TypeScript, а в правой — типы, полученные применением утилиты Partial к этим интерфейсам. Сопоставьте каждый интерфейс с соответствующим типом, полученным с помощью Partial. Обратите внимание, что порядок типов в правой колонке не соответствует порядку интерфейсов в левой. Для успешного выполнения задания необходимо сопоставить 5 пар.
interface User {
name: string;
age: number;
}interface Product {
id: number;
title: string;
price: number;
}interface Book {
title: string;
author: string;
pages: number;
}interface Car {
brand: string;
model: string;
year: number;
}interface Point {
x: number;
y: number;
}{
brand?: string;
model?: string;
year?: number;
}{
title?: string;
author?: string;
pages?: number;
}{
id?: number;
title?: string;
price?: number;
}{
name?: string;
age?: number;
}{
x?: number;
y?: number;
}5. Что допустит компилятор?
Проанализируйте код TypeScript с использованием типа Partial. Ниже приведено несколько операций присваивания для переменной типа Partial
interface User {
id: number;
name: string;
email: string;
}
let partialUser: Partial<User>;
// Присваивание 1:
partialUser = { id: 1, name: 'Alice', email: 'alice@example.com' };
// Присваивание 2:
partialUser = { id: 2 };
// Присваивание 3:
partialUser = { name: 'Bob', age: 30 };
// Присваивание 4:
partialUser = { email: 123 };
// Присваивание 5:
partialUser = {};
// Присваивание 6:
partialUser = { id: 3, name: 'Charlie', email: 'charlie@example.com', isActive: true };6. Собери функцию обновления
Из предложенных строк соберите корректную typescript-функцию, которая принимает объект типа User и объект с частичными обновлениями типа Partial
type User = { id: number; name: string; email: string;};function updateUser(user: User, updates: Partial<User>): User { return { ...user, ...updates };} user = { ...user, ...updates };7. Результат чтения свойства
В данном задании рассматривается использование утилитарного типа Partial в TypeScript. В приведённом фрагменте кода объявлен интерфейс, создан объект с применением типа Partial, а затем выполняется чтение одного из его свойств. Определите, какое значение будет выведено в консоль при выполнении этого кода. Введите результат в поле ответа в виде одного слова или числа (например, undefined, 42, 'текст').
interface User {
id: number;
name: string;
email: string;
}
const partialUser: Partial<User> = { name: "Alice" };
console.log(partialUser.email);