ts 大佬们,嵌套里的对象要怎么定义?
interface TestType {
id?: number,
createId?: number,
createTime?: string,
curr?: string,
fiyTeacher?: string,
stateFlag?: number
}
interface DetailType {
buttonOption?: [],
fromDetail?: {},
userList?: []
}
ts 大佬们,嵌套里的对象要怎么定义?
interface TestType {
id?: number,
createId?: number,
createTime?: string,
curr?: string,
fiyTeacher?: string,
stateFlag?: number
}
interface DetailType {
buttonOption?: [],
fromDetail?: {},
userList?: []
}
在 TypeScript 中,定义嵌套对象可以通过在接口(interface)中嵌套其他接口或类型来实现。对于你给出的 TestType
和 DetailType
接口,如果你想要 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 编译器才能正确地为你提供类型检查和智能提示。
你这个类型适用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;
}
其中 buttonOption
和 userList
的定义,要根据实际的情况来。准确的说,这个 Result
类型应该根据后端返回的数据来类型来定义。
如果这里拿到返回的类型,只需要用一部分属性的话,可以只定义需要的那部分属性,不需要的属性可以不定义,也可以定义为 unknown
类型。