53 items
Discriminated Union Narrowing in React
Code QuizDiscriminated Unions in React Props
QuizNarrowing Invalidation
FlashcardType Guards vs Type Assertions
Slides / VideoNarrowing the unknown Type
Slides / VideoControl Flow Analysis and Narrowing Scope
Slides / VideoAssertion Functions with 'asserts'
Slides / VideoExhaustiveness Checking with never
Slides / VideoDiscriminated Unions and Tagged Narrowing
Slides / VideoUser-Defined Type Guards with 'is'
Slides / VideoNull and Undefined Narrowing
Slides / VideoEquality Narrowing with === and switch
Slides / VideoTruthiness Narrowing
Slides / VideoThe in Operator for Property Checking
Slides / Videoinstanceof Type Guards
Slides / Videotypeof Type Guards
Slides / VideoWhat Type Narrowing Is
Slides / VideoEquality Narrowing
FlashcardUser-Defined Type Guards (is)
Flashcardtypeof Type Guards
FlashcardArray.isArray Narrowing
FlashcardType Assertions vs Type Guards
FlashcardNon-Null Assertion Operator (!)
FlashcardAssertion Functions (asserts)
Flashcardin Operator Narrowing
FlashcardControl Flow Analysis Narrowing
FlashcardDiscriminated Unions
Flashcardinstanceof Type Guards
FlashcardExhaustiveness Checking with never
FlashcardNarrowing Out null and undefined
FlashcardNarrowing the unknown Type
FlashcardTruthiness Narrowing
FlashcardHelper Function Loses Narrowing
Code QuizFilter Callback Missing Type Predicate
Code Quiztypeof Cannot Detect Arrays
Code QuizNon-null Assertion Hides Real Bug
Code QuizWrong Null Check Misses Undefined
Code QuizEquality Narrowing Dead Branch
Code QuizTruthiness Narrowing Drops Zero
Code QuizOptional Chaining Yields Possibly Undefined
Code QuizUsing unknown Without Narrowing
Code QuizReassignment Resets Narrowing
Code QuizNon-null Assertion Operator
Quiztypeof Guards for Primitives
QuizArray.isArray as Type Guard
QuizNarrowing Loss in Closures
QuizNarrowing Literal and Union Types
Quiznever in Exhaustiveness Checking
QuizNarrowing via Assignment
QuizType Predicate Return Effect
QuizControl Flow Analysis Basics
QuizEquality Narrowing
QuizTruthiness Narrowing
QuizDiscriminated Union Narrowing in React
Spot the property access bug inside a narrowed branch of a discriminated union.
type LoadingState = { status: "loading" };
type SuccessState = { status: "success"; data: string };
type ErrorState = { status: "error"; message: string };
type State = LoadingState | SuccessState | ErrorState;
function Display({ state }: { state: State }) {
if (state.status === "loading") {
return <p>Loading...</p>;
} else if (state.status === "success") {
return <p>{state.message}</p>;
} else {
return <p>{state.message}</p>;
}
}The discriminated union is correctly defined, but this component fails to compile. What is the bug?