Sobes.tech
Middle

Kako odrediti da li je vrednost tipa unknown konkretni imenovani tip? Kako da TypeScript shvati da je provera izvršena (type guard)?

sobes.tech АИ

Одговор од АИ

Чтобы определить, что значение типа unknown соответствует конкретному именованному типу в TypeScript, нужно написать функцию-предикат типа (type guard). Такая функция проверяет структуру или свойства объекта и сообщает компилятору, что после проверки значение имеет нужный тип.

Пример: допустим, есть интерфейс

interface User {
  name: string;
  age: number;
}

И есть значение value: unknown. Чтобы проверить, что value — это User, пишем функцию:

type User = { name: string; age: number };

function isUser(value: unknown): value is User {
  return typeof value === 'object' && value !== null &&
         'name' in value && typeof (value as any).name === 'string' &&
         'age' in value && typeof (value as any).age === 'number';
}

Здесь value is User — это специальный синтаксис, который говорит TypeScript, что если функция возвращает true, то value можно считать типом User.

Использование:

const data: unknown = getData();

if (isUser(data)) {
  // Здесь TypeScript знает, что data — User
  console.log(data.name);
} else {
  // data не User
}

Таким образом, type guard позволяет безопасно работать с типом unknown, уточняя его до конкретного именованного типа.