是否可以扩展诸如方式?
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等。
通过这种方式,它们紧密耦合到各自的接口。就是您应该无法通过subject as Math and course as ENG232
当前,它在extends T
的ICourse界面上抱怨为:An interface can only extend an object type or intersection of object types with statically known members.
答案 0 :(得分:1)
您不能扩展泛型类型,因此该语句不正确
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 };
还要注意,您不应将通用类型视为将接口组合在一起的方式。如果您没有接口/类的类型,并且希望该通用接口/类型的用户对其进行声明,则应该使用它。
例如,您不知道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 };