Middle
¿Cómo determinar si un valor de tipo unknown es un tipo nombrado específico? ¿Cómo hacer que TypeScript entienda que la comprobación se ha realizado (tipo de guardia)?
sobes.tech AI
Respuesta de la IA
Чтобы определить, что значение типа 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, уточняя его до конкретного именованного типа.