Как в Typescript достать из объекта только поля одного типа?

В TypeScript есть несколько способов достать из объекта только поля одного типа.

1. Используйте синтаксис отбора (дополнительной фигурной скобки) в сопоставлении типа. Это позволит создать новый тип, содержащий только поля указанного типа.

type Person = {
  name: string;
  age: number;
  email: string;
};

type PersonName = {
  name: string;
};

const person: Person = {
  name: "John",
  age: 30,
  email: "[email protected]"
};

const personName: PersonName = person; // допустимо
console.log(personName); // { name: "John" }

В этом примере создается тип PersonName, который содержит только поле name. При присвоении переменной personName значение переменной person, TypeScript автоматически отберет только поле name из объекта person.

2. Используйте оператор Pick для явного выбора полей из объекта и создания нового типа.

type Person = {
  name: string;
  age: number;
  email: string;
};

type PersonName = Pick<Person, "name">;

const person: Person = {
  name: "John",
  age: 30,
  email: "[email protected]"
};

const personName: PersonName = person; // допустимо
console.log(personName); // { name: "John" }

В этом примере с помощью оператора Pick создается новый тип PersonName, который выбирает только поле name из типа Person. При присвоении переменной personName значение переменной person, TypeScript автоматически отберет только поле name из объекта person.

3. Используйте конструкцию as для явного преобразования типа объекта.

type Person = {
  name: string;
  age: number;
  email: string;
};

const person: Person = {
  name: "John",
  age: 30,
  email: "[email protected]"
};

const personName = person as { name: string };
console.log(personName); // { name: "John" }

В этом примере с помощью конструкции as мы явно указываем, что переменная person должна интерпретироваться как объект с полем name. TypeScript автоматически отберет только поле name из объекта person и присвоит его переменной personName.

В обоих случаях TypeScript выполняет статическую проверку типов и гарантирует, что новый объект (или переменная) будет содержать только поля указанного типа. Это позволяет избежать ошибок и облегчить разработку, особенно при работе с большими объектами или в командной разработке.