Элемент неявно имеет тип 'любой', поскольку выражение типа 'строка' - PullRequest
0 голосов
/ 27 мая 2020

Почему я получаю эту ошибку?

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ 0: string; 1: string; 2: string; 3: string; }'.
  No index signature with a parameter of type 'string' was found on type '{ 0: string; 1: string; 2: string; 3: string; }'.ts(7053)

это мой код: я специально сделал индекс строкой, поэтому проблем быть не должно, но моя переменная StatusMap дает мне этот красный флаг ..

 const getStatusMeaning = (index: string) => {
    const StatusMap = {
      '0': 'Unknown',
      '1': 'Pending',
      '2': 'Success',
      '3': 'Failure',
    }

    return StatusMap[index]
  }

Ответы [ 3 ]

2 голосов
/ 27 мая 2020

В качестве альтернативы ответу @Paleo, если вам нужен строго типизированный метод, я бы рекомендовал следующее:

const StatusMap = {
  '0': 'Unknown',
  '1': 'Pending',
  '2': 'Success',
  '3': 'Failure',
};

const getStatusMeaning = (index: keyof typeof StatusMap): string => {
  return StatusMap[index];
}

enter image description here

2 голосов
/ 27 мая 2020

Вы можете определить правильный тип для index:

const getStatusMeaning = (index: '0' | '1' | '2' | '3') => {
  // Your implementation here
}

Или используйте тип словаря { [key: string]: string }:

const getStatusMeaning = (index: string) => {
  const StatusMap: { [key: string]: string } = {
    '0': 'Unknown',
    '1': 'Pending',
    '2': 'Success',
    '3': 'Failure',
  }

  return StatusMap[index]
}
1 голос
/ 27 мая 2020

Если вы учитываете тот факт, что некоторые строки не существуют в качестве ключей в вашей карте состояния, вы можете сообщить TypeScript, что ваша карта является строковой записью:

const StatusMap: Record<string, string> = {

Другое решение - больше укажите c об индексе и разрешите только поддерживаемые индексы вместо любой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...