У меня есть проблема.
***Feel Free to Express*****I need an idea***
Как рекурсивно погружаться через глубоко вложенные модели машинописи? И сопоставьте эти глубокие пути как объект [ключ: значение].
, где ключ - это имя столбца или идентифицируемое имя, а значение - это пройденный путь (глубина).
что я имею в виду по глубине это someObject.level1.level2.level3.level4 ... Вот так.
Представьте, что у меня есть пара интерфейсов Typescript (все внешние файлы).
Один интерфейс указывает на другой затем другой и т. д.
Например:
export interface University {
name: string;
type: string;
locationDetails: Location;
revenue: Revenue;
departments: Departments[];
collegesUnder: Colleges[];
status: boolean;
}
Вот интерфейс, описывающий Местоположение
export interface Location {
street: string;
state: string;
postCode: number;
}
Вот интерфейс, описывающий Отдел
export interface Departments {
name: string;
category: string;
coursesOffered: Courses[];
}
Вот интерфейс, описывающий колледж
export interface College {
collegeName: string;
collegeLocation: Location;
coursesOffered: Courses[];
studentsEnrolled: Students[];
}
Вот интерфейс, описывающий студента
export interface Student {
studentName: string;
department: Department;
course: Course;
age: number;
address: string;
otherInfo: OtherInfo;
}
Вот интерфейс, описывающий курс
export interface Course {
name: string;
classifiedUnder: string;
subCourses: Course[];
}
Так что, как вы можете, есть куча машинописных файлов. Все они являются отдельными файлами и названы в соответствии с соглашением interfaceName.model.ts. имя_интерфейса соответствует каждому имени идентификатора интерфейса. Фронтент разрабатывается с использованием Angular.
Я буду получать json данные с сервера, который содержит информацию об университетах. & все эти данные будут показаны в виде таблицы (без вложенности).
В верхней части каждого заголовка у меня будет поле ввода &, поскольку типы использования в таблице отфильтровываются.
Для глубокого поиска мне нужно получить доступ к глубоко вложенным путям этих моделей. И мне придется делать это отдельно для каждого типа поисковых запросов.
& всякий раз, когда какое-либо свойство добавляется заново в любой из этих интерфейсов, мне придется приходить и вносить соответствующие изменения.
Поэтому я придумаю решение:
для сопоставления каждого имени столбца с глубиной объекта:
Например, если пользователь ищет в столбце Имя ученика:
return universities.filter(university => {
retrurn university.colleges.some(college => {
return college.students.some(student => {
return student.name
})
})
})
Итак, моя идея состоит в том, чтобы сопоставить имя каждого столбца с каждой глубиной, чтобы я мог получить к нему прямой доступ:
следующим образом:
searchMap = {
universityName: university.name,
universityType: university.type;
universityLocationStreet: university.location.street;
universityLocationState: university.location.state;
universityLocationPostcode: university.location.postcode;
... Like so...
studentsName: university[i].colleges[j].students[k].student.name
// see how the nesting goes on...
}
Таким образом, смысл в том, что если какие-либо изменения появляются в файлах typescript.model.ts (в будущем, если они внесут какие-либо изменения в свойства), я хочу управлять им автоматически.
Поэтому я хочу найти решение для рекурсивного сканирования через эти интерфейсы машинописи (которые все внешние и будут импортированы внутри определений типов) и сделают из него объект searchMap (карту глубины).
Будет очень полезно, если вы сможете что-то выяснить * 10 60 *
ответ на комментарии
* Это реальный сценарий.
* Это рекурсия. Потому что, когда он находит определение другого типа (которое снова является другим объектом), код должен будет выполнить ту же процедуру, чтобы углубиться в этот новый объект, а затем добавить все эти глубины следующим образом: Object.depth1.depth2.depth3.depth4 et c ...
** Это не странная идея. Вы можете найти сходство с vscode или вашей IDE IntelliSense. & поскольку мы печатаем в каждой глубине (для определенных интерфейсов), мы можем получить доступ к этим свойствам глубины. Здесь я хочу просто проследить эти пути автоматически и объединить их вместе, а затем сопоставить их с объектом с помощью идентифицируемого ключевого слова, чтобы всякий раз, когда мне нужно было получить доступ к этим глубинам / уровням, мне просто нужно поместить этот ключ на объект.