TypeScript просит добавить тип к значению ключа - PullRequest
2 голосов
/ 26 мая 2020

У меня есть форма в моем angular проекте. И эта форма содержит ввод с загрузкой изображения. Поэтому я использую FormData для отправки данных на сервер. Я пытаюсь использовать функцию для добавления полей формы в FormData.

export function toFormData<T>(formValue: T) {
    const formData = new FormData();

    for (const key of Object.keys(formValue)) {
        const value = formValue[key];  <--- error here
        formData.append(key, value);
    }

    return formData;
}

sendForm() {
    const team = toFormData(this.form.value);
    this.teamService.sendTeam(team).subscribe(() => {});
}

Я получил ошибку от ts-lint "Элемент неявно имеет тип" любой ", потому что выражение типа" строка "не может может использоваться для индексации типа «unknown». Для типа «unknown» не обнаружена индексная подпись с параметром типа «string». IDE подчеркивает выражение formValue [ключ]. Пытался добавить типы, но не помогло.

1 Ответ

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

formValue[key] равно any, потому что T не сужает типы, это нормально.

Чтобы подавить эту ошибку, вам нужно преобразовать any в unknown, как это T extends Record<string, unknown>. Теперь это означает, что value имеет неизвестный тип, и он должен быть подтвержден перед использованием переменной.

export function toFormData<T extends Record<string, unknown>>(formValue: T) {
    const formData = new FormData();

    for (const key of Object.keys(formValue)) {
        const value = formValue[key];
        // feel free to remove Blob if it's not your case.
        if (typeof value !== 'string' && !(value instanceof Blob)) {
            continue;
        }
        formData.append(key, value);
    }

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