სასარგებლო ტიპები

ტაპსკრიპტში გვაქვს ბევრი დამხმარე ტიპი. ეს ტიპები აღწერილია ჯენერიკების გამოყენებით.

მაგალითისთვის გვაქვს შემდგომი კოდი:

TS
interface Currency {
  [key: string]: number;
}

const currency: Currency = {
  gel: 1,
  usd: 0.36,
  eur: 0.34,
};

ამ შემთხვევაში გვაქვს Currency-ის ინტერფეისი, რომელშიც მოთავსებული არის რიცხვითი ტიპის მნიშვნელობები.

იგივე ინტერფეისი შეგვეძლო უფრო მარტივად აგვეღწერა ტაიპსკრიპტის ჩაშენებული ტიპით, კერძოდ Record-ით.

TS
type Currency = Record<string, number>;

const currency: Currency = {
  gel: 1,
  usd: 0.36,
  eur: 0.34,
};

Record

Record<Keys, Type> ტიპი შექმნის ობიექტს, სადაც აღწერილი იქნება Keys თვისებები Type ტიპით.

TS
type CatName = 'miffy' | 'boris' | 'mordred';

interface CatInfo {
  age: number;
  breed: string;
}

const cats: Record<CatName, CatInfo> = {
  miffy: { age: 10, breed: 'Persian' },
  boris: { age: 5, breed: 'Maine Coon' },
  mordred: { age: 16, breed: 'British Shorthair' },
};

Partial

Partial<Type> ტიპი შექმნის ობიექტს, რომლის თვისებებიც იქნება არასავალდებულო (optional).

TS
interface Todo {
  title: string;
  description: string;
}

// ❌ ცუდი მიდგომა

interface fieldsToUpdateBadWay {
  title?: string;
  description?: string;
}

// ✅ კარგი მიდგომა

type fieldsToUpdateBetterWay = Partial<Todo>;

function updateTodo(todo: Todo, fieldsToUpdate: fieldsToUpdateBetterWay): Todo {
  return { ...todo, ...fieldsToUpdate };
}

const todo1 = {
  title: 'organize desk',
  description: 'clear clutter',
};

const todo2 = updateTodo(todo1, {
  description: 'throw out trash',
});

Required

Required<Type> ტიპი შექმნის ობიექტს, რომლის თვისებებიც იქნება სავალდებულო.

TS
interface Props {
  a?: number;
  b?: string;
}

const obj: Props = { a: 5 };

const obj2: Required<Props> = { a: 5 }; // Property 'b' is missing in type '{ a: number; }' but required in type 'Required<Props>'.

Readonly

Readonly ტიპი შექმნის ობიექტს, რომლის თვისებებიც იქნება readonly. readonly თვისების მნიშვნელობის შეცვლა არ შეიძლება.

TS
interface Todo {
  title: string;
}

const todo: Readonly<Todo> = {
  title: 'Delete inactive users',
};

todo.title = 'Hello'; // Cannot assign to 'title' because it is a read-only property.

Pick

Pick<Type, Keys> ტიპი შექმნის ახალ ტიპს, სადაც Keys მნიშვნელობები იქნება შერჩეული Type-დან.

TS
type Email = `${string}@${string}.${string}`;

interface User {
  name: string;
  lastName: string;
  email: Email;
  password: string;
}

type UserCredentials = Pick<User, 'email' | 'password'>;

const user: UserCredentials = {
  email: 'example@user.ge',
  password: 'badpass123',
};

Omit

Omit<Type, Keys> ტიპი შექმნის ახალ ტიპს, სადაც Keys მნიშვნელობები იქნება მოშორებული Type-დან.

TS
type Email = `${string}@${string}.${string}`;

interface User {
  name: string;
  lastName: string;
  email: Email;
  password: string;
}

type UserInfo = Omit<User, 'email' | 'password'>;

const user: UserInfo = {
  name: 'john',
  lastName: 'doe',
};

შეჯამება

ამ სტატიაში განვიხილეთ ტაიპსკრიპტის დამხმარე ჯენერიკ ტიპები. ტაიპსკრიპტს კიდევ ბევრი სასარგებლო ტიპი გააჩნია, რომლებსაც შეგიძლიათ გაეცნოთ Typescript utility types სტატიაში.

გამოყენებული ლიტერატურა