Bird
Raised Fist0
Typescriptprogramming~20 mins

Type compatibility with classes in Typescript - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Type Compatibility Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of class instance assignment compatibility
Consider these two classes and the assignment below. What will be the output when running this code?
Typescript
class Animal {
  name: string;
  constructor(name: string) {
    this.name = name;
  }
}

class Dog extends Animal {
  breed: string;
  constructor(name: string, breed: string) {
    super(name);
    this.breed = breed;
  }
}

let animal: Animal = new Dog('Buddy', 'Golden Retriever');
console.log(animal.name);
AError: Property 'name' does not exist on type 'Animal'
Bundefined
C"Golden Retriever"
D"Buddy"
Attempts:
2 left
💡 Hint
Think about inheritance and what properties are available on the base class reference.
❓ Predict Output
intermediate
2:00remaining
Assigning incompatible class instances
What error will this TypeScript code produce?
Typescript
class Car {
  wheels: number = 4;
}

class Boat {
  sails: number = 2;
}

let vehicle: Car = new Boat();
ANo error, assignment is allowed.
BType 'Boat' is not assignable to type 'Car'. Property 'wheels' is missing in type 'Boat'.
CRuntime error: Cannot read property 'wheels' of undefined.
DType 'Car' is not assignable to type 'Boat'.
Attempts:
2 left
💡 Hint
Check if the properties of the assigned object match the target type.
🔧 Debug
advanced
2:30remaining
Why does this class assignment cause an error?
Given these classes, why does the assignment cause a TypeScript error? Identify the reason.
Typescript
class Person {
  private id: number;
  constructor(id: number) {
    this.id = id;
  }
}

class Employee {
  private id: number;
  constructor(id: number) {
    this.id = id;
  }
}

let p: Person = new Employee(123);
ABecause private members with the same name but declared in different classes make the types incompatible.
BBecause the classes have different constructors.
CBecause TypeScript does not allow assignment between any classes.
DBecause the classes have different property types.
Attempts:
2 left
💡 Hint
Check how private members affect type compatibility in TypeScript.
📝 Syntax
advanced
2:00remaining
Which class assignment is valid in TypeScript?
Given these classes, which assignment will NOT cause a TypeScript error?
Typescript
class Alpha {
  x: number = 1;
}

class Beta extends Alpha {
  y: number = 2;
}

class Gamma {
  y: number = 2;
}

let a: Alpha;
let b: Beta;
let g: Gamma;
Aa = b;
Bb = a;
Cg = a;
Da = g;
Attempts:
2 left
💡 Hint
Remember that a subclass instance can be assigned to a base class variable.
🚀 Application
expert
3:00remaining
Predict the output of method compatibility in class assignment
What will be the output of this TypeScript code when executed?
Typescript
class Base {
  greet(): string {
    return "Hello from Base";
  }
}

class Derived {
  greet(): string {
    return "Hello from Derived";
  }
}

let base: Base = new Derived();
console.log(base.greet());
A"Hello from Base"
BType error: Type 'Derived' is not assignable to type 'Base'.
C"Hello from Derived"
DRuntime error: base.greet is not a function.
Attempts:
2 left
💡 Hint
Think about method overriding and how TypeScript handles structural typing for classes.

Practice

(1/5)
1. In TypeScript, when are two classes considered compatible for assignment?
easy
A. When they have the same number of methods
B. Only if they share the same class name
C. When their instances have matching properties and types
D. If they are declared in the same file

Solution

  1. Step 1: Understand Type Compatibility

    TypeScript checks if the properties and their types in one class instance match those expected by another class type.
  2. Step 2: Check Class Names and Methods

    Class names or method counts do not affect compatibility; only the shape (properties and types) matters.
  3. Final Answer:

    When their instances have matching properties and types -> Option C
  4. Quick Check:

    Compatibility = matching properties and types [OK]
Hint: Focus on properties and types, not class names [OK]
Common Mistakes:
  • Assuming class names must match
  • Thinking method count matters
  • Believing file location affects compatibility
2. Which of the following is the correct syntax to assign an instance of class B to a variable typed as class A in TypeScript, assuming compatibility?
easy
A. let a: B = A();
B. let a: A = new B();
C. let a = A(new B());
D. let a = new A(B);

Solution

  1. Step 1: Review TypeScript Assignment Syntax

    To assign an instance of class B to a variable typed as A, use let a: A = new B(); if B is compatible with A.
  2. Step 2: Identify Incorrect Syntax

    Other options misuse constructor calls or type annotations and are invalid.
  3. Final Answer:

    let a: A = new B(); -> Option B
  4. Quick Check:

    Use let var: Type = new Class(); [OK]
Hint: Use variable: Type = new Class() for assignments [OK]
Common Mistakes:
  • Calling classes like functions
  • Swapping variable and type names
  • Using incorrect constructor syntax
3. Consider the following TypeScript code:
class A { x: number; }
class B { x: number; y: string; }

let a: A = new B();
console.log(a.x);
What will be the output when this code runs?
medium
A. undefined
B. Runtime error
C. The value of x from B instance
D. Compilation error

Solution

  1. Step 1: Analyze Class Properties and Assignment

    Class B has properties x and y. Class A has only x. Assigning new B() to a variable typed as A is allowed because B has at least the properties of A.
  2. Step 2: Check Output of console.log(a.x)

    The property x exists on the B instance. Since no value is assigned to x, it is undefined, so console.log(a.x) outputs "undefined".
  3. Final Answer:

    undefined -> Option A
  4. Quick Check:

    Compatible class instance property accessed correctly [OK]
Hint: Compatible class instances share accessible properties [OK]
Common Mistakes:
  • Expecting runtime error due to extra properties
  • Thinking assignment causes compilation error
  • Assuming class properties are auto-initialized to 0
4. Given the code below, why does TypeScript show an error?
class A { x: number; }
class B { y: string; }

let a: A = new B();
medium
A. Because new B() is not a valid constructor call
B. Because class names differ
C. Because B has extra property y
D. Because B does not have property x required by A

Solution

  1. Step 1: Check Property Compatibility

    Class A requires property x. Class B only has property y, so B instances lack x.
  2. Step 2: Understand TypeScript Compatibility Rules

    TypeScript requires the assigned instance to have all properties of the target type. Missing x causes error.
  3. Final Answer:

    Because B does not have property x required by A -> Option D
  4. Quick Check:

    Missing required property causes error [OK]
Hint: Check if assigned class has all required properties [OK]
Common Mistakes:
  • Thinking class names must match
  • Assuming extra properties cause error
  • Believing constructor call is invalid
5. You have two classes:
class Person { name: string; age: number; }
class Employee { name: string; age: number; salary: number; }
Which assignment is valid and why?
let p: Person = new Employee();
let e: Employee = new Person();
hard
A. Only let p: Person = new Employee(); is valid because Employee has all Person properties
B. Only let e: Employee = new Person(); is valid because Person has fewer properties
C. Both assignments are valid because classes share some properties
D. Neither assignment is valid due to different class names

Solution

  1. Step 1: Compare Properties of Person and Employee

    Employee has all properties of Person plus salary. Person lacks salary.
  2. Step 2: Check Assignment Compatibility

    Assigning Employee instance to Person variable is valid (extra properties allowed). Assigning Person instance to Employee variable is invalid (missing salary).
  3. Final Answer:

    Only let p: Person = new Employee(); is valid because Employee has all Person properties -> Option A
  4. Quick Check:

    Extra properties allowed, missing properties not [OK]
Hint: Assign subclass to superclass type, not vice versa [OK]
Common Mistakes:
  • Assuming both assignments are valid
  • Confusing extra vs missing properties
  • Thinking class names affect compatibility
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard