Вы можете получить тип школы Student
путем поиска свойства "student"
School
, которое является типом массива, а затем свойства number
этого типа массива, как это:
export interface School {
name: string;
student: {
student_id: number;
student_name: string;
}[];
}
type Student = School["student"][number];
// type Student = {
// student_id: number;
// student_name: string;
// }
Если number
вас смущает, представьте, что у вас есть переменная school
типа School
, переменная studentKey
строкового литерала типа "student"
и переменная numberKey
типа number
declare const school: School;
declare const studentKey: "student";
declare const numberKey: number;
Тогда вы ожидаете, что school[studentKey][numberKey]
будет Student
:
const student: Student = school[studentKey][numberKey]; // okay
И тип school[studentKey][numberKey]
это просто School["student"][number]
, это то, что вы называете Student
.
Ссылка на код .
Конечно, более обычным является определение Student
сначала, а затем определение School
в терминах его, поэтому, если вам не нужно , чтобы сначала определить School
и извлечь из него Student
, Я бы последовал @ совету Кокодоко .
Надеюсь, это поможет. Удачи!