Bird
Raised Fist0
Typescriptprogramming~10 mins

Never type and unreachable code in Typescript - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to declare a function that never returns.

Typescript
function fail(): [1] {
  throw new Error('This function never returns');
}
Drag options to blanks, or click blank then click option'
Anever
Bvoid
Cany
Dundefined
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'void' instead of 'never' for functions that throw errors.
Using 'any' which is too general.
2fill in blank
medium

Complete the code to make the switch statement exhaustive using the never type.

Typescript
type Color = 'red' | 'green' | 'blue';

function checkColor(c: Color) {
  switch(c) {
    case 'red':
      return 'Red';
    case 'green':
      return 'Green';
    case 'blue':
      return 'Blue';
    default:
      const _exhaustiveCheck: [1] = c;
      return _exhaustiveCheck;
  }
}
Drag options to blanks, or click blank then click option'
Anever
Bvoid
Cany
Dunknown
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'any' which disables type checking.
Not handling the default case at all.
3fill in blank
hard

Fix the error in the function that should never return but currently returns a value.

Typescript
function errorFunction(): never {
  [1] 'Error occurred';
}
Drag options to blanks, or click blank then click option'
Areturn
Bthrow
Cconsole.log
Dyield
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'return' with a string, which contradicts the 'never' return type.
Using 'console.log' which does not stop execution.
4fill in blank
hard

Fill both blanks to create an exhaustive check function using the never type.

Typescript
function assertNever(x: [1]): [2] {
  throw new Error('Unexpected value: ' + x);
}
Drag options to blanks, or click blank then click option'
Anever
Bstring
Dvoid
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'string' as parameter type which allows unexpected values.
Using 'void' as return type which implies function can return normally.
5fill in blank
hard

Fill all three blanks to handle all cases and use the never type for unreachable code.

Typescript
type Shape = { kind: 'circle', radius: number } | { kind: 'square', size: number };

function area(s: Shape): number {
  switch(s.kind) {
    case 'circle':
      return Math.PI * s.radius * s.radius;
    case 'square':
      return s.size * s.size;
    default:
      return [1]([2]);
  }
}

function [3](x: never): never {
  throw new Error('Unexpected shape: ' + x);
}
Drag options to blanks, or click blank then click option'
AassertNever
Bs
Cnever
DhandleError
Attempts:
3 left
💡 Hint
Common Mistakes
Using a wrong function name in the default case.
Passing the wrong variable to the function.
Not using the never type in the function parameter.

Practice

(1/5)
1. What does the never type represent in TypeScript?
easy
A. A variable that can hold any type of value.
B. A type that represents optional values.
C. A function that returns null or undefined.
D. A function that never returns normally, like one that always throws an error or loops forever.

Solution

  1. Step 1: Understand the never type meaning

    The never type is used for functions or expressions that never complete normally, such as those that throw errors or run infinite loops.
  2. Step 2: Compare with other types

    Other options describe common types like any, null, or optional, which are different from never.
  3. Final Answer:

    A function that never returns normally, like one that always throws an error or loops forever. -> Option D
  4. Quick Check:

    never means no normal return [OK]
Hint: Never means function never finishes normally [OK]
Common Mistakes:
  • Confusing never with void or any
  • Thinking never means optional or nullable
  • Assuming never is a value type
2. Which of the following is the correct syntax for a function that returns never in TypeScript?
easy
A. function fail(): never { throw new Error('Fail'); }
B. function fail(): void { return; }
C. function fail(): never { return null; }
D. function fail(): string { throw new Error('Fail'); }

Solution

  1. Step 1: Check function return type and body

    A function returning never must not return normally. Throwing an error fits this.
  2. Step 2: Validate each option

    function fail(): never { throw new Error('Fail'); } throws an error, so it never returns normally. function fail(): void { return; } returns void normally. function fail(): never { return null; } tries to return null, which is invalid for never. function fail(): string { throw new Error('Fail'); } returns string but throws, so return type mismatches.
  3. Final Answer:

    function fail(): never { throw new Error('Fail'); } -> Option A
  4. Quick Check:

    Throw error matches never return [OK]
Hint: Throw error to return never type correctly [OK]
Common Mistakes:
  • Returning a value in a never function
  • Using void instead of never
  • Returning null or undefined in never
3. What will be the output of this TypeScript code?
function check(value: string | number) {
  switch (typeof value) {
    case 'string':
      return 'string';
    case 'number':
      return 'number';
    default:
      const _exhaustiveCheck: never = value;
      return _exhaustiveCheck;
  }
}
console.log(check(42));
medium
A. 'string'
B. 'number'
C. Compilation error due to unreachable code
D. Runtime error

Solution

  1. Step 1: Analyze the switch cases

    The function handles 'string' and 'number' types explicitly, so the default case is unreachable for these inputs.
  2. Step 2: Check the call and output

    Calling check(42) matches the 'number' case, so it returns 'number'. The default case with never is never reached.
  3. Final Answer:

    'number' -> Option B
  4. Quick Check:

    Handled all cases, returns 'number' [OK]
Hint: Check switch covers all types, default never runs [OK]
Common Mistakes:
  • Thinking default case runs for known types
  • Confusing never with runtime errors
  • Expecting compilation error for unreachable default
4. Identify the error in this TypeScript code snippet:
function assertNever(x: never): never {
  throw new Error('Unexpected value: ' + x);
}

function process(value: string | number) {
  if (typeof value === 'string') {
    return 'string';
  } else if (typeof value === 'number') {
    return 'number';
  } else {
    return assertNever(value);
  }
}
medium
A. Error because assertNever should return void not never.
B. Error because assertNever is called with a non-never type.
C. No error; code is correct and safe.
D. Error because value can never be string | number.

Solution

  1. Step 1: Understand the function purpose

    assertNever is used to catch unexpected values at compile time by requiring a never type.
  2. Step 2: Analyze the process function

    All possible types string and number are handled. The else branch is unreachable, so value is never there, making the call valid.
  3. Final Answer:

    No error; code is correct and safe. -> Option C
  4. Quick Check:

    Unreachable else means value is never [OK]
Hint: Else unreachable means value is never type [OK]
Common Mistakes:
  • Thinking assertNever is called with string or number
  • Confusing never return with void
  • Assuming else branch always runs
5. Given this TypeScript code, what is the best way to ensure all cases are handled and catch missing cases at compile time?
type Shape = { kind: 'circle', radius: number } | { kind: 'square', size: number };

function area(shape: Shape): number {
  switch (shape.kind) {
    case 'circle':
      return Math.PI * shape.radius ** 2;
    // Missing case for 'square'
  }
}
hard
A. Add a default case that calls a function accepting never to catch unhandled cases.
B. Ignore missing cases; TypeScript will warn automatically.
C. Add a default case that returns 0 without checks.
D. Use any type for shape to avoid errors.

Solution

  1. Step 1: Identify missing case problem

    The 'square' case is missing, so the switch is not exhaustive.
  2. Step 2: Use never type to catch missing cases

    Adding a default case that calls a function requiring never forces TypeScript to check exhaustiveness and report missing cases.
  3. Final Answer:

    Add a default case that calls a function accepting never to catch unhandled cases. -> Option A
  4. Quick Check:

    Use never in default to enforce exhaustiveness [OK]
Hint: Use default with never to catch missing cases [OK]
Common Mistakes:
  • Assuming TypeScript warns without default never
  • Returning default values silently
  • Using any to bypass type safety
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