Back to questions
Middle
1
Как определить, является ли значение типа unknown конкретным именованным типом? Как сделать так, чтобы TypeScript понял, что проверка выполнена (type guard)?
Companies where asked
Электронные офисные системы
Answer from AI
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, уточняя его до конкретного именованного типа.