TypeScript Mixins and Composition Quiz
A 40-question TypeScript quiz covering mixin patterns, composition techniques, mixin constraints, function-based class factories, multiple mixin stacking, and practical patterns.
Question 1
What is a mixin in TypeScript?
Question 2
What design principle do mixins support?
Question 3
What does a typical mixin function return?
Question 4
What does this mixin add?
type Ctor<T = {}> = new (...args: any[]) => T;
function WithLogger<TBase extends Ctor>(Base: TBase) {
return class extends Base {
log(msg: string) { console.log(msg); }
};
}Question 5
What pattern does this represent?
const Enhanced = Timestamped(WithLogger(Base));Question 6
Why is this signature common?
type Constructor<T = {}> = new (...args: any[]) => T;Question 7
Composition encourages:
Question 8
What is a benefit of composition?
Question 9
Does TypeScript have built-in syntax for mixins?
Question 10
Mixin constraints ensure:
Question 11
Which generic pattern applies constraints?
Question 12
Constraints improve:
Question 13
What does this constraint enforce?
function WithID<TBase extends Constructor<{ id: number }>>(Base: TBase) {
return class extends Base {};
}Question 14
This mixin adds which behavior?
function Movable<TBase extends Constructor>(Base: TBase) {
return class extends Base {
move(x: number) { return x * 2; }
};
}Question 15
Why is this mixin compatible?
class Point { constructor(public x: number) {} }
const MovablePoint = Movable(Point);Question 16
What is a potential issue with stacking many mixins?
Question 17
Which approach helps avoid mixin conflicts?
Question 18
Multiple mixins create:
Question 19
What does this stack produce?
const Final = Aware(Timestamped(WithLogger(Base)));Question 20
Why does this error?
function WithName<TBase extends Constructor>(Base: TBase) {
return class extends Base { name = "x"; };
}
function NeededName<TBase extends Constructor<{ name: string }>>(Base: TBase) {
return class extends Base {};
}
const C = NeededName(class {});
Question 21
What is added here?
function WithFlag<TBase extends Constructor>(Base: TBase) {
return class extends Base { flag = true; };
}Question 22
Composition is often used to:
Question 23
Mixins enable:
Question 24
What is a risk when mixing numerous capabilities?
Question 25
What happens here?
function Taggable<TBase extends Constructor>(Base: TBase) {
return class extends Base { tags: string[] = []; };
}
class BaseClass {}
const T = Taggable(BaseClass);
const t = new T();
t.tags.push("x");Question 26
What does this mixin assume?
function HasPosition<TBase extends Constructor<{ x: number; y: number }>>(Base: TBase) {
return class extends Base {
distance() { return Math.sqrt(this.x ** 2 + this.y ** 2); }
};
}Question 27
Why is this compatible?
class Pos { constructor(public x: number, public y: number) {} }
const P = HasPosition(Pos);Question 28
Mixins can:
Question 29
Which describes function-based mixins?
Question 30
How can composition handle state?
Question 31
What do mixins help avoid?
Question 32
Which is a recommended mixin practice?
Question 33
Which mixin structure is typical?
Question 34
Behavior composition means:
Question 35
Which is a real scenario for mixins?
Question 36
Which part of TypeScript supports composition strongly?
Question 37
Mixins typically operate:
Question 38
Composition is often preferred because:
Question 39
What do mixins NOT provide?
Question 40
Overall, mixins encourage:
