当前位置: 首页 > 知识库问答 >
问题:

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

干稳
2024-06-19


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

interface TestType {  id?: number,  createId?: number,  createTime?: string,  curr?: string,  fiyTeacher?: string,  stateFlag?: number}interface DetailType {  buttonOption?: [],  fromDetail?: {},  userList?: []}

共有5个答案

贝钧
2024-06-19

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

汲灿
2024-06-19

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

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 类型。

鲜于玮
2024-06-19

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

公冶光亮
2024-06-19
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` 为具体类型}
薛烈
2024-06-19

在 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 编译器才能正确地为你提供类型检查和智能提示。

 类似资料: