@kot98

Как правильно использовать тип unknown?

const setName = (key: keyof SearchDataType, item: unknown) => {
  switch (key) {
    case 'employers':
      return item.company
    case 'employees':
      return item.fio
    case 'products':
      return item.name
...
  }
}

Получаю ошибку: error TS18046: 'item' is of type 'unknown'. Как это поправить?
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 2
vabka
@vabka
Токсичный шарпист
Варианта четыре:
1. Кастануть в any
2. Кастануть в конкретный тип
3. Использовать narrowing: Сделать проверки, что typeof item === "object" и что у него есть нужные свойства.
4. Если заранее знаешь, что у тебя item - это какой-то тип из нескольких, то вместо unknown можно сделать union

Вот ещё пример:
https://www.typescriptlang.org/play?target=9#code/...
Ответ написан
Комментировать
Alexandroppolus
@Alexandroppolus
кодир
type FuncSetNameParams = ['employers', {company: string}] | ['employees', {fio: string}] | ['products', {name: string}];

const setName = (...[key, item]: FuncSetNameParams): string => {
  switch (key) {
    case 'employers':
      return item.company
    case 'employees':
      return item.fio
    case 'products':
      return item.name
  }
}


https://www.typescriptlang.org/play?target=9&ssl=1...

это если все варианты возвращают строку.
а если тип возвращаемого значения зависит от key, то надо ещё слегонца дописать..

а возможно, всё гораздо проще, и item всегда один и тот же объект, независимо от key. Тогда просто описать его тип и использовать этот тип вместо unknown
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы