我有一个如下所示的接口文件。
我想使用该界面重新定义Student类型。
export interface School{
name: string;
student: {
student_id: number;
student_name: string;
}[];
}
type Student = ... (student_id: number, student_name)
所以,我尝试了这个:
type Student = Pick<School, "student">["student"]
==>
#Student = {
# student_id: number;
# student_name: string;
#}[]
但这是一个数组,而不是通用数组。
在这种情况下,如何定义学校对象?
答案 0 :(得分:2)
不清楚为什么要使用泛型?如果您的学校界面也需要学生类型,则可以声明另一个界面:
interface School {
name: string;
students: Student[];
}
interface Student {
student_id: number;
student_name: string;
}
let s:School = {
name:"too cool for school",
students: [
{
student_id:3,
student_name:"Joe"
}
]
}
答案 1 :(得分:0)
您可以通过looking up Student
的{{1}}属性(它是数组类型),然后选择"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
,我会关注@Kokodoko's advice。
希望有帮助。祝你好运!