Bird
Raised Fist0
Typescriptprogramming~5 mins

The in operator narrowing in Typescript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the in operator do in TypeScript type narrowing?
It checks if a property exists in an object and narrows the type based on that check.
Click to reveal answer
beginner
How does TypeScript narrow types using if ('property' in object)?
Inside the if block, TypeScript knows the object has that property, so it narrows the type to those that include that property.
Click to reveal answer
intermediate
Given type A = {x: number} and type B = {y: string}, what does if ('x' in obj) narrow obj to?
It narrows obj to type A because only A has the property x.
Click to reveal answer
intermediate
Can the in operator be used to narrow union types with overlapping properties?
Yes, but if both types have the property, in won't narrow the type because the property exists in both.
Click to reveal answer
beginner
Why is in operator narrowing useful in TypeScript?
It helps safely access properties by confirming they exist, preventing runtime errors and improving code safety.
Click to reveal answer
What does if ('prop' in obj) check in TypeScript?
AIf <code>prop</code> is a function
BIf <code>obj</code> is a string
CIf <code>obj</code> is null
DIf <code>obj</code> has the property <code>prop</code>
If type A = {x: number} and type B = {y: string}, what does if ('x' in obj) narrow obj to?
AType B
BBoth A and B
CType A
DNeither A nor B
Can in operator narrow types if both union members share the same property?
ANo, because the property exists in both types
BNo, never
COnly if the property is optional
DYes, always
What happens if you use in operator on a property that does not exist in any union member?
ATypeScript throws an error
BTypeScript narrows to never
CTypeScript narrows to all union members
DTypeScript ignores the check
Why is using in operator narrowing safer than just accessing a property directly?
AIt prevents runtime errors by ensuring the property exists
BIt makes the code run faster
CIt changes the property value
DIt automatically types the property as string
Explain how the in operator helps TypeScript narrow types in a union.
Think about how TypeScript knows which type you have inside an if block.
You got /3 concepts.
    Describe a situation where in operator narrowing would not work to distinguish types.
    Consider when two types share the same property name.
    You got /3 concepts.

      Practice

      (1/5)
      1.

      What does the in operator do in TypeScript?

      easy
      A. Adds a new property to an object
      B. Checks if a property exists in an object and narrows the type
      C. Deletes a property from an object
      D. Checks if a value is equal to a property

      Solution

      1. Step 1: Understand the in operator purpose

        The in operator checks if a given property exists in an object.
      2. Step 2: Recognize its use in TypeScript narrowing

        TypeScript uses this check to narrow the type safely based on the presence of the property.
      3. Final Answer:

        Checks if a property exists in an object and narrows the type -> Option B
      4. Quick Check:

        in operator = property check and type narrowing [OK]
      Hint: Remember: in checks property presence to narrow types [OK]
      Common Mistakes:
      • Thinking in adds or deletes properties
      • Confusing in with equality checks
      • Assuming in works only for arrays
      2.

      Which of the following is the correct syntax to check if property name exists in object obj using the in operator?

      ?
      easy
      A. "name" in obj
      B. obj in "name"
      C. obj.hasOwnProperty("name")
      D. obj.name in

      Solution

      1. Step 1: Recall the in operator syntax

        The correct syntax is: "propertyName" in object.
      2. Step 2: Match the syntax with options

        "name" in obj matches the correct syntax exactly: "name" in obj.
      3. Final Answer:

        "name" in obj -> Option A
      4. Quick Check:

        Syntax is "property" in object [OK]
      Hint: Syntax is always "property" in object [OK]
      Common Mistakes:
      • Reversing the order of property and object
      • Using method calls instead of in
      • Leaving in without operands
      3.

      What will be the output of the following TypeScript code?

      type Fish = { swim: () => void };
      type Bird = { fly: () => void };
      
      function move(animal: Fish | Bird) {
        if ("swim" in animal) {
          return "Fish can swim";
        } else {
          return "Bird can fly";
        }
      }
      
      console.log(move({ swim: () => {} }));
      medium
      A. Type error at compile time
      B. "Bird can fly"
      C. "Fish can swim"
      D. Runtime error

      Solution

      1. Step 1: Analyze the input object

        The object passed has a swim method, so it matches the Fish type.
      2. Step 2: Check the in operator condition

        The condition "swim" in animal is true, so the function returns "Fish can swim".
      3. Final Answer:

        "Fish can swim" -> Option C
      4. Quick Check:

        Property "swim" exists, so output is "Fish can swim" [OK]
      Hint: Check which property exists to decide output [OK]
      Common Mistakes:
      • Confusing which property belongs to which type
      • Assuming both properties exist simultaneously
      • Expecting compile or runtime errors
      4.

      Identify the error in this TypeScript code using the in operator and fix it:

      type Cat = { meow: () => void };
      type Dog = { bark: () => void };
      
      function speak(animal: Cat | Dog) {
        if (animal in "meow") {
          return "Cat speaks";
        } else {
          return "Dog speaks";
        }
      }
      medium
      A. The in operator operands are reversed; should be "meow" in animal
      B. Missing return type annotation
      C. Function should use typeof instead of in
      D. No error; code is correct

      Solution

      1. Step 1: Check in operator syntax

        The syntax requires the property name as the left operand and the object as the right operand.
      2. Step 2: Identify the error in the code

        The code uses animal in "meow", which reverses operands. It should be "meow" in animal.
      3. Final Answer:

        The in operator operands are reversed; should be "meow" in animal -> Option A
      4. Quick Check:

        Property name must be left, object right in in [OK]
      Hint: Remember: "property" in object, not object in "property" [OK]
      Common Mistakes:
      • Swapping operands of the in operator
      • Using typeof instead of in for property checks
      • Ignoring TypeScript narrowing benefits
      5.

      Given the following types and function, what will describeAnimal return when called with { fly: () => {}, name: "Eagle" }?

      type Fish = { swim: () => void };
      type Bird = { fly: () => void; name: string };
      
      function describeAnimal(animal: Fish | Bird) {
        if ("swim" in animal) {
          return "Fish";
        } else if ("name" in animal) {
          return `Bird named ${animal.name}`;
        } else {
          return "Unknown";
        }
      }
      hard
      A. "Fish"
      B. Type error because of missing property
      C. "Unknown"
      D. "Bird named Eagle"

      Solution

      1. Step 1: Check the input object properties

        The object has fly and name properties, but no swim.
      2. Step 2: Evaluate the in operator conditions

        First condition "swim" in animal is false. Second condition "name" in animal is true, so it returns Bird named Eagle.
      3. Final Answer:

        "Bird named Eagle" -> Option D
      4. Quick Check:

        Property "name" exists, so output is "Bird named Eagle" [OK]
      Hint: Check properties in order to find matching type [OK]
      Common Mistakes:
      • Assuming presence of fly means Fish
      • Ignoring the second in check for name
      • Expecting errors due to missing swim
      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