TypeScript要求将类型添加到键值

问题描述 投票:2回答:1

我的棱角项目中有表格。并且此表单包含带有图像上传的输入。因此,我使用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中收到一个错误,“元素隐式具有'any'类型,因为类型'string'的表达式不能用于索引'unknown'类型。没有带有参数'string类型的索引签名在“未知”类型上找到了“”。 IDE强调formValue [key]表达式。尝试添加类型,但没有帮助。

angular typescript
1个回答
2
投票

[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;
}
© www.soinside.com 2019 - 2024. All rights reserved.