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 限制键的类型必须是该对象类型中所有键之一,并返回该键对应的值。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐