Sobes.tech
Назад к вопросам
Middle
2

Как определить, является ли значение типа unknown конкретным именованным типом? Как сделать так, чтобы TypeScript понял, что проверка выполнена (type guard)?

Компании, где спрашивали
Электронные офисные системы

Ответ от нейросети

sobes.tech AI

Чтобы определить, что значение типа 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, уточняя его до конкретного именованного типа.