formData表单如何定义ts类型,以及如何使用formData和使用场景;formData.append() ts报错没有与此调用匹配的重载;ts中keyof的使用
formData 对象是一种用于在 HTML 表单中收集数据的方法。与传统的 URL 编码的表单数据相比,它支持文件上传和二进制数据传输。创建一个FormData对象,然后调用它的append()方法来向里面添加字段名称和字段值。在 TypeScript 中,keyof 是一个在对象中获取所有键名的类型操作符。它的语法是 keyof T,其中 T 是对象类型,结果是一个字符串字面量类型,包含了 T
1.formData表单中如何定义ts类型?
export interface MyFormData extends FormData {
append(
//keyof可以获取对象中所有的键名
name: keyof MyForm,//MyForm是提交的表单(下面有完整代码)
value:string | Blob,
fileName?: string,
): void;
}
上面代码定义了一个MyFormData的接口 ,它继承自 FormData
,并添加了一个新的方法 append
。append 方法的参数有三个:name 表示表单字段的名称,它的类型是 keyof MyForm,也就是在 MyFormData接口中定义的字段名;value 表示字段的值,它的类型可以是字符串或者 Blob 类型的数据;fileName 表示上传文件时的文件名,它是可选参数。这个方法用于向表单中添加字段和值,它通过调用原生 FormData 对象的 append 方法实现。
完整代码:
type MyFormData = {//提交的表单项
system_logo?: Blob;
about_logo?: Blob;
product_logo?: Blob;
productName: string;
showAbout: 'Y' | 'N';
};
export interface MyFormData extends FormData {
append<T extends string | Blob>(
name: keyof SystemInfoFormData,
value: T,
fileName?: string,
): void;
}
2.formData怎么使用?什么时候使用?
formData 对象是一种用于在 HTML 表单中收集数据的方法。与传统的 URL 编码的表单数据相比,它支持文件上传和二进制数据传输。
创建一个FormData对象,然后调用它的append()
方法来向里面添加字段名称和字段值。
var formData = new FormData();
formData.append("username", "lili");
formData.append("age", 20); //数字会被转换成字符串
注意:
如果在ts文件中,一定要手动将值转成字符串类型,不然会出现ts类型检测报错:没有与此调用匹配的重载。(vscode有时有,有时没有,很奇怪)
除了最常用的append方法外,还有其他一些方法,例如 get()、getAll()、has() 和 delete()。可以通过这些方法获取指定字段的值,获取所有字段的值,检查表单中是否存在指定字段,或者删除指定字段。
使用场景:
(1) 文件上传:
使用 FormData 对象可以轻松上传文件。可以通过 append() 方法添加文件字段,然后将它们一起发送到服务器。由于 FormData 对象支持二进制数据传输,因此可以直接将文件上传到服务器,而不需要对文件进行编码或解码。
(2) 表单提交
可以使用 append() 方法添加表单字段,并将其发送到服务器。不过现在不涉及到文件上传的表单,基本都是用JSON的格式了。如果表单中有上传文件的,就一定要用到它了。
3.ts类型中的keyof是什么?
在 TypeScript 中,keyof
是一个在对象中获取所有键名的类型操作符。它的语法是 keyof T,其中 T 是对象类型,结果是一个字符串字面量类型,包含了 T 中所有的键。举例如下:
interface Person {
name: string;
age: number;
}
type PersonKey = keyof Person; // "name" | "age"
type PersonName = Person["name"]; // string
keyof 操作符最常见的场景是用于类型约束和索引类型查询。例如,使用 keyof 来获取对象的某个键对应的值的类型:
function getProperty<T, K extends keyof T>(obj: T, key: K) {
return obj[key];
}
const person: Person = { name: 'John', age: 30 };
const name = getProperty(person, 'name'); // name 的类型是 string
const age = getProperty(person, 'age'); // age 的类型是 number
在上面的例子中,getProperty 函数接受一个对象和一个键,使用 keyof 限制键的类型必须是该对象类型中所有键之一,并返回该键对应的值。
更多推荐
所有评论(0)