PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Как из Unknown получить другой тип?

Продвинутые темы

Из `unknown` получают другой тип через сужение (narrowing): проверки `typeof`, `instanceof`, `in`, пользовательские type guards, или явное приведение (`as`) — но только после проверки.

unknown требует проверки

unknown — безопасный аналог any: значение неизвестного типа, но перед использованием нужно сузить тип:

let value: unknown = getData();
value.toUpperCase(); // ошибка — нельзя без проверки

Способы сужения

typeof (для примитивов)

if (typeof value === 'string') {
  value.toUpperCase(); // здесь value: string
}

instanceof (для классов)

if (value instanceof Date) {
  value.getTime(); // value: Date
}

in (проверка свойства)

if (typeof value === 'object' && value !== null && 'name' in value) {
  // value имеет свойство name
}

Пользовательский type guard

function isUser(v: unknown): v is User {
  return typeof v === 'object' && v !== null && 'id' in v;
}
if (isUser(value)) value.id; // value: User

Явное приведение (as) — с осторожностью

const user = value as User; // приведение без проверки — небезопасно

Лучше после проверки; as не проверяет в рантайме.

unknown против any

  • any — отключает проверки (опасно).
  • unknown — требует сузить тип перед использованием (безопасно).

Коротко для собеседования

Из unknown получают тип сужением: typeof (примитивы), instanceof (классы), in (свойства), пользовательские type guards (v is Type), или as (явное приведение — небезопасно, без рантайм-проверки). unknown безопаснее any — требует проверки перед использованием. Предпочтительно сужать через проверки, а не as.

Другие вопросы раздела