TypeScript не учитывает троичный оператор с неопределенным - PullRequest
0 голосов
/ 15 апреля 2020
interface FormikInstance {
    touched: {[key: string]: boolean | undefined}
    errors: {[key: string]: string | undefined}
    status?: {[key: string]: string}
}

const useFormikErrors = (formik: FormikInstance) => {
    const showErrors = (fieldName: string): boolean => {
        const status = formik.status ? formik.status[fieldName] : undefined;
        return !!formik.touched[fieldName] && (!!formik.errors[fieldName] || !!status);
    }
    const getErrors = (fieldName: string): string => {
        const status = formik.status ? formik.status[fieldName] : undefined;
        // errors is of type: string | undefined, but should be string
        let errors = formik.errors[fieldName] === undefined ? '' : formik.errors[fieldName];
        errors += status === undefined ? '' : status;
        return errors;
    }
    return [showErrors, getErrors]
};

Проблема отмечена в комментарии. Переменная ошибок string | undefined. В машинописи рассматриваются троичные операторы или я что-то упускаю здесь очевидное? Заранее спасибо.

1 Ответ

1 голос
/ 15 апреля 2020

Проверка типа вложенного свойства, к сожалению, не сужает его тип. Вы можете исправить это, сначала извлекая значение в отдельную переменную (что также помогает сделать код более DRY):

const fieldErrors = formik.errors[fieldName];
let errors = fieldErrors === undefined ? '' : fieldErrors;
errors += status === undefined ? '' : status;
return errors;
...