Невозможный резервный возврат вызывает проблему с покрытием. Ошибка Ts иначе - PullRequest
0 голосов
/ 05 августа 2020
type Status = "default" | "hover" | "active" | "disabled"
type StatusMap = {
    [key in Status]?: boolean
}
const stack: Status[] = ['disabled', 'active', 'hover', 'default']
function getStatus(props: StatusMap): Status {
    for (let i = 0; i <= stack.length; i++) {
        const s = stack[i]
        if (props[s]) {
            return s
        }
    }
}

Вот код ts, который вызывает проблемы:

В функции отсутствует конечный оператор возврата, а тип возвращаемого значения не включает 'undefined'

Ts считают есть шанс вернуть undefined, однако в реальном варианте использования это невозможно. Потому что по крайней мере один ключ будет присутствовать в StatusMap, даже если он отмечен как необязательный.

Возможно, быстрое решение - вернуть значение по умолчанию, чтобы ts не жаловался. Однако возврат по умолчанию никогда не будет выполнен, что вызывает проблемы с покрытием.

Какое возможное решение

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Я говорю, что должен быть один из ключей по какой-то причине. Я добавляю default:true перед передачей, поэтому в объявлении типа

type StatusMap = {
  [key in TabStatus]?: boolean
} & { default: true }
0 голосов
/ 05 августа 2020

Другое возможное решение - изменить тип возвращаемого значения функции на Status | undefined. Однако это может вызвать другие ошибки в местах, где используется getStatus. Если вы действительно уверены, что StatusMap будет иметь хотя бы одно значение в местах, где будет вызываться getStatus, то вы можете изменить (props: StatusMap) на (props: Required<StatusMap>). Я считаю, что это предотвратит все ошибки TS здесь)

...