[英]Typescript: Generics interface extension
是否有可能以这种方式扩展?
export interface IClass<T extends ISubject> {
subject : T;
course : ICourse<T>;
}
export interface ICourse<T> extends T { }
export interface ISubject { }
ClassRoom 可以实现教授数学、英语的 IClass。 但是,课程应该与主题相关。 这样,数学有以下课程:MAT101、MAT205等,英语有ENG232、ENG302等。
通过这种方式,它们与各自的接口紧密耦合。 IE。 你不应该把subject as Math and course as ENG232
目前它抱怨 ICourse 接口的extends T
为: An interface can only extend an object type or intersection of object types with statically known members.
您不能扩展泛型类型,因此此语句不正确
export interface ICourse<T> extends T { }
我会拆分课程中的主题代码 (MAT, ENG) 和编号 (205, 232)。
export enum Subject {
Math = "MAT",
English = "ENG"
}
export interface Course {
subjectCode: SubjectCode,
courseId: number,
}
然后你可以有这样的课程:
const math101: Course = { subjectCode: Subject.Math, courseId: 205 };
const english232: Course = { subjectCode: Subject.English, courseId: 232 };
还请注意,您不应将 Generic Type 视为将接口组合在一起的方式。 当您没有接口/类的类型并希望该通用接口/类型的用户声明它时,应该使用它。
例如,您不知道courseId
是字符串还是数字。 您可以制作这样的Course
界面。
export interface Course<T> {
subjectCode: SubjectCode,
courseId: T,
}
然后用法是:
const math101: Course<string> = { subjectCode: Subject.Math, courseId: "205" };
const english232: Course<number> = { subjectCode: Subject.English, courseId: 232 };
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.