What does it mean when TypeScript 'infers' generic types?
TypeScript automatically figures out the specific types to use for generic parameters based on the values you provide when calling a function or creating an object.
Click to reveal answer
beginner
How does TypeScript infer the generic type in this function?
function identity<T>(arg: T): T { return arg; }
TypeScript looks at the argument you pass to identity and sets T to that argument's type automatically. For example, if you call identity(5), T becomes number.
Click to reveal answer
intermediate
Can TypeScript infer multiple generic types in a function? Give an example.
When you call pair('hello', 10), TypeScript infers T as string and U as number.
Click to reveal answer
beginner
What happens if TypeScript cannot infer a generic type?
You must explicitly provide the generic type when calling the function or creating the object. For example, identity<string>('text') tells TypeScript exactly what type to use.
Click to reveal answer
beginner
Why is generic type inference helpful in TypeScript?
It saves you from writing extra type annotations, making code cleaner and easier to read, while still keeping type safety.
Click to reveal answer
What does TypeScript use to infer a generic type in a function?
AThe type of the argument passed to the function
BThe return type of the function
CThe name of the generic parameter
DThe order of the generic parameters
✗ Incorrect
TypeScript looks at the argument's type to decide what the generic type should be.
If a function has two generic types T and U, how does TypeScript infer them?
AFrom the first argument only
BFrom the function's return type
CFrom the types of the corresponding arguments passed
DIt cannot infer multiple generic types
✗ Incorrect
TypeScript infers each generic type from the matching argument's type.
What should you do if TypeScript cannot infer a generic type?
AExplicitly specify the generic type when calling the function
BRename the generic type
CIgnore the error and run the code
DRemove the generic type
✗ Incorrect
You provide the type explicitly to help TypeScript understand what you mean.
Which of these is a benefit of TypeScript's generic type inference?
AIt disables type checking
BIt removes type safety
CIt makes code longer
DIt reduces the need for extra type annotations
✗ Incorrect
Inference helps keep code clean without losing type safety.
Given function wrap<T>(value: T): { value: T }, what is the inferred type of T when calling wrap('hello')?
Anumber
Bstring
Cboolean
Dany
✗ Incorrect
Since 'hello' is a string, TypeScript infers T as string.
Explain how TypeScript infers generic types when you call a generic function.
Think about how TypeScript guesses the types based on what you pass in.
You got /3 concepts.
Describe a situation where you need to explicitly specify generic types in TypeScript.
Consider functions with no input or complex types.
You got /3 concepts.
Practice
(1/5)
1. What does TypeScript do when you call a generic function without specifying the type explicitly?
easy
A. It ignores the generic and treats the function as non-generic.
B. It throws a compilation error asking for the type.
C. It guesses the generic type based on the arguments you pass.
D. It always uses the type any by default.
Solution
Step 1: Understand generic function calls
When you call a generic function without specifying the type, TypeScript tries to figure out the type from the arguments you provide.
Step 2: Check TypeScript behavior
TypeScript uses the argument types to infer the generic type automatically, so you don't have to write it explicitly.
Final Answer:
It guesses the generic type based on the arguments you pass. -> Option C
Quick Check:
Type inference = guessing type from arguments [OK]
Hint: Remember: TypeScript guesses generic types from arguments [OK]
Believing generic types are ignored if not specified
2. Which of the following is the correct syntax to define a generic function in TypeScript that returns the same type it receives?
easy
A. function identity<T>(arg: T): T { return arg; }
B. function identity(arg: T): T { return arg; }
C. function identity<T>(arg): T { return arg; }
D. function identity<T>(arg: T): any { return arg; }
Solution
Step 1: Check generic function syntax
The generic type parameter T must be declared before the function parameters inside angle brackets <T>.
Step 2: Verify parameter and return types
The parameter arg should be typed as T, and the return type should also be T to return the same type.
Final Answer:
function identity<T>(arg: T): T { return arg; } -> Option A
Quick Check:
Generic syntax = <T> before parameters [OK]
Hint: Generic type <T> goes before parameters in function definition [OK]
Common Mistakes:
Omitting <T> before parameters
Not typing the argument as T
Returning any instead of T
3. What will be the output of this TypeScript code?
function wrapInArray<T>(value: T) {
return [value];
}
const result = wrapInArray(42);
console.log(typeof result[0]);
medium
A. "number"
B. "string"
C. "object"
D. "undefined"
Solution
Step 1: Identify the generic type inferred
The function wrapInArray is called with 42, a number, so TypeScript infers T as number.
Step 2: Check the returned array and logged type
The function returns an array containing the number 42. Accessing result[0] gives 42, so typeof result[0] is "number".
Final Answer:
"number" -> Option A
Quick Check:
typeof 42 = "number" [OK]
Hint: Generic type matches argument type, so typeof matches argument [OK]
Common Mistakes:
Assuming the type is string by default
Confusing array type with element type
Expecting 'object' because of array
4. Consider this code snippet:
function firstElement<T>(arr: T[]): T {
return arr[0];
}
const value = firstElement([true, false, true]);
console.log(value.toUpperCase());
What is the problem here?
medium
A. The array passed is empty, so arr[0] is undefined.
B. TypeScript cannot infer the generic type T.
C. The function firstElement returns an array instead of an element.
D. Calling toUpperCase() on a boolean causes a compile-time error.
Solution
Step 1: Analyze the inferred generic type
The array [true, false, true] is of type boolean[], so T is inferred as boolean.
Step 2: Check the method call on the returned value
The function returns a boolean, but toUpperCase() is a string method. Calling it on a boolean causes a compile-time error.
Final Answer:
Calling toUpperCase() on a boolean causes a compile-time error. -> Option D
Quick Check:
Boolean has no toUpperCase() method [OK]
Hint: Check if method matches the inferred type before calling [OK]
Common Mistakes:
Thinking TypeScript inference failed
Assuming function returns array instead of element
Ignoring compile-time errors from wrong method calls
5. You want to write a generic function mergeObjects that takes two objects and returns a new object combining both. How does TypeScript infer the generic types when you call mergeObjects({name: "Alice"}, {age: 30})?
function mergeObjects(obj1: T, obj2: U): T & U {
return {...obj1, ...obj2};
}
hard
A. TypeScript infers both T and U as object losing specific properties.
B. TypeScript infers T as {name: string} and U as {age: number}, returning their intersection type.
C. TypeScript cannot infer generic types for multiple parameters automatically.
D. TypeScript infers T and U as any by default.
Solution
Step 1: Identify argument types passed to the function
The first argument is {name: "Alice"} which has type {name: string}. The second is {age: 30} with type {age: number}.
Step 2: Understand TypeScript's inference for multiple generics
TypeScript infers T as the type of the first argument and U as the type of the second argument automatically.
Step 3: Check the return type
The return type is the intersection T & U, meaning the combined object has both name and age properties.
Final Answer:
TypeScript infers T as {name: string} and U as {age: number}, returning their intersection type. -> Option B
Quick Check:
Multiple generics inferred from each argument [OK]
Hint: Each generic inferred from corresponding argument type [OK]
Common Mistakes:
Assuming generic types default to object or any
Thinking TypeScript can't infer multiple generics
Confusing intersection type with union type
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.