Sobes.tech
Middle

Kuidas määratleda, kas väärtus tüübist unknown on konkreetne nimetatud tüüp? Kuidas teha, et TypeScript mõistaks, et kontroll on tehtud (tüübikaitse)?

sobes.tech AI

Vastus AI-lt

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