ts 大佬们,嵌套里的对象要怎么定义?


ts 大佬们,嵌套里的对象要怎么定义?

interface TestType {
  id?: number,
  createId?: number,
  createTime?: string,
  curr?: string,
  fiyTeacher?: string,
  stateFlag?: number
}

interface DetailType {
  buttonOption?: [],
  fromDetail?: {},
  userList?: []
}
阅读 1.5k
avatarAI BotBETA

在 TypeScript 中,定义嵌套对象可以通过在接口(interface)中嵌套其他接口或类型来实现。对于你给出的 TestTypeDetailType 接口,如果你想要 DetailType 中的 fromDetail 属性是一个包含 TestType 类型的对象,你可以这样定义:

interface TestType {
  id?: number;
  createId?: number;
  createTime?: string;
  curr?: string;
  fiyTeacher?: string;
  stateFlag?: number;
}

interface DetailType {
  buttonOption?: any[]; // 注意:这里你原来写的是 [],但没有指定数组元素的类型,我假设为 any
  fromDetail?: TestType; // 这里我们定义 fromDetail 为 TestType 类型
  userList?: any[]; // 同样,这里也没有指定数组元素的类型,我也假设为 any
}

这样,fromDetail 属性就被定义为一个可选的 TestType 类型的对象。你可以根据需要在 fromDetail 属性中设置 TestType 接口中定义的所有字段。

关于你图片中的示例,图片没有提供足够的信息来直接给出一个确切的 TypeScript 定义,但如果你想要定义嵌套的对象,你需要明确每个层级对象的结构和类型。通常,每个层级都可以定义为一个接口,然后在更高级别的接口中引用这些低级别的接口。

请注意,在 TypeScript 中定义数组和对象时,如果没有明确指定元素或属性的类型,你可以使用 any 类型作为占位符,但这样做会失去类型检查的好处。更好的做法是尽量明确每个元素或属性的类型。

另外,请确保在实际编码时,你提供的图片中的示例结构与你的 TypeScript 定义相匹配,这样 TypeScript 编译器才能正确地为你提供类型检查和智能提示。

4 个回答
interface TestType {
  id?: number,
  createId?: number,
  createTime?: string,
  curr?: string,
  flyTeacher?: string,
  stateFlag?: number
}

interface DetailType {
  buttonOption?: any[], // 根据需要替换 `any` 为具体类型
  fromDetail?: TestType, // 将这里的类型改为 TestType
  userList?: any[] // 根据需要替换 `any` 为具体类型
}

你这个类型适用Record类型,类似其他语言的map和字典。
参见recordkeys-type
所以fromDetail类型可以写成Record<string, TestType>

根据截图来看,大概应该这样定义

interface Test1 {
  createId: number;
  createTime: string;
  curr: string;
  fiyTeacher: string;
  id: number;
  stateFlag: 0 | 1 | 2;   // 看情况,也可以直接用 number 或者用枚举
}

interface Test2 {
  id: number;
  mainId: number;
  score: number;
  stateFlag: 0 | 1 | 2;
  passFlag: 0 | 1 | 2;
}

interface FormDetail {
  test1: Test1,
  test2: Test2
}

interface Result {
  buttonOption : unknown | null,
  userList: unknown | null,
  formDetail: FormDetail;
}

其中 buttonOptionuserList 的定义,要根据实际的情况来。准确的说,这个 Result 类型应该根据后端返回的数据来类型来定义。

如果这里拿到返回的类型,只需要用一部分属性的话,可以只定义需要的那部分属性,不需要的属性可以不定义,也可以定义为 unknown 类型。

可以复制这个对象,然后用在线js-to-ts这个网站去生成ts类型定义。

logo
Microsoft
子站问答
访问
宣传栏