📖 Scenario: You are building a simple program to manage collections of items. You want to create a generic interface that can work with any type of collection, like numbers or strings.
🎯 Goal: Create a generic interface called Collection with a method to add items and a method to get all items. Then use this interface with a number collection and a string collection.
📋 What You'll Learn
Create a generic interface called Collection with a type parameter T.
Add a method add(item: T): void to add an item to the collection.
Add a method getAll(): T[] to return all items in the collection.
Create a variable numberCollection of type Collection<number>.
Create a variable stringCollection of type Collection<string>.
💡 Why This Matters
🌍 Real World
Generic interfaces help you write flexible code that works with many types of data, like lists of numbers, strings, or custom objects.
💼 Career
Understanding generics is important for TypeScript developers to create reusable and type-safe components and libraries.
Progress0 / 4 steps
1
Create the generic interface
Create a generic interface called Collection with a type parameter T. Inside it, declare a method add(item: T): void and a method getAll(): T[].
Typescript
Hint
Use interface Collection<T> to create a generic interface with type parameter T.
2
Create number and string collections
Create a variable called numberCollection of type Collection<number> and a variable called stringCollection of type Collection<string>. For now, assign them empty objects {}.
Typescript
Hint
Use const numberCollection: Collection<number> = {} and similarly for strings.
3
Implement the collections with arrays
Implement numberCollection and stringCollection as objects with an internal array called items. Add the add(item: T): void method to push items to the array, and the getAll(): T[] method to return the array.
Typescript
Hint
Use an array property items inside each object to store the collection items.
4
Add items and print collections
Add the numbers 10 and 20 to numberCollection using add. Add the strings "apple" and "banana" to stringCollection using add. Then print the results of getAll() for both collections using console.log.
Typescript
Hint
Use numberCollection.add(10) and console.log(numberCollection.getAll()) to add and print.
Practice
(1/5)
1. What does the <T> represent in a generic interface in TypeScript?
easy
A. A function inside the interface
B. A fixed type like number or string
C. A placeholder for any type that will be specified later
D. A variable name for a property
Solution
Step 1: Understand generic syntax
The <T> in TypeScript generics is a placeholder representing any type that will be provided when the interface is used.
Step 2: Differentiate from fixed types
Unlike fixed types like number or string, T is flexible and can represent any type, making the interface reusable.
Final Answer:
A placeholder for any type that will be specified later -> Option C
Quick Check:
Generic <T> = placeholder type [OK]
Hint: Remember <T> means 'any type' placeholder [OK]
Common Mistakes:
Thinking T is a fixed type
Confusing T with a function
Assuming T is a variable name
2. Which of the following is the correct syntax to declare a generic interface named Collection with a type parameter T?
easy
A. interface Collection<T> { items: T[]; }
B. interface Collection { items: T[]; }
C. interface Collection<T> { items: Array; }
D. interface Collection<T> { items: T; }
Solution
Step 1: Check generic declaration
The correct syntax to declare a generic interface uses <T> after the interface name, like interface Collection<T>.
Step 2: Verify property type
The property items should be an array of type T, so items: T[] is correct.
Final Answer:
interface Collection<T> { items: T[]; } -> Option A
A. The array items contain numbers, but the interface expects strings
B. The interface is missing the generic type parameter
C. The variable strings should be declared with type number
D. The interface property items should not be an array
Solution
Step 1: Check the generic type used
The variable strings is declared as Collection<string>, so items must be an array of strings.
Step 2: Check the assigned array type
The assigned array is [1, 2, 3], which is an array of numbers, not strings, causing a type mismatch error.
Final Answer:
The array items contain numbers, but the interface expects strings -> Option A
Quick Check:
Type mismatch in generic array = The array items contain numbers, but the interface expects strings [OK]
Hint: Check if array elements match generic type [OK]
Common Mistakes:
Ignoring type mismatch between generic and array
Forgetting to specify generic parameter
Assuming interface property can be non-array
5. You want to create a generic interface KeyValueCollection that stores key-value pairs where keys are strings and values can be any type T. Which interface definition correctly achieves this?
hard
A. interface KeyValueCollection<T> { [T: string]: string; }
B. interface KeyValueCollection<T> { keys: string[]; values: T[]; }
C. interface KeyValueCollection<T> { key: string; value: T; }
D. interface KeyValueCollection<T> { [key: string]: T; }
Solution
Step 1: Understand key-value pair requirement
The interface should allow any string as a key and associate it with a value of generic type T.
Step 2: Check index signature syntax
Using [key: string]: T; means any string key maps to a value of type T, which matches the requirement.
Step 3: Eliminate other options
interface KeyValueCollection<T> { keys: string[]; values: T[]; } separates keys and values arrays, which is less direct. interface KeyValueCollection<T> { key: string; value: T; } defines a single pair, not a collection. interface KeyValueCollection<T> { [T: string]: string; } has incorrect syntax.
Final Answer:
interface KeyValueCollection<T> { [key: string]: T; } -> Option D
Quick Check:
Index signature with generic value = interface KeyValueCollection<T> { [key: string]: T; } [OK]
Hint: Use index signature [key: string]: T for generic key-value [OK]
Common Mistakes:
Using arrays for keys and values separately
Defining only one key-value pair instead of collection
Incorrect index signature syntax
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.