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
FlashcardExhaustiveness Checking with never
FlashcardNarrowing Out null and undefined
FlashcardAssertion Functions (asserts)
FlashcardControl Flow Analysis Narrowing
FlashcardNon-Null Assertion Operator (!)
Flashcardin Operator Narrowing
FlashcardUser-Defined Type Guards (is)
FlashcardTruthiness Narrowing
FlashcardDiscriminated Unions
Flashcardtypeof Type Guards
FlashcardNarrowing the unknown Type
Flashcardinstanceof Type Guards
FlashcardArray.isArray Narrowing
FlashcardType Assertions vs Type Guards
FlashcardFilter Callback Missing Type Predicate
Code QuizHelper Function Loses Narrowing
Code QuizOptional Chaining Yields Possibly Undefined
Code QuizWrong Null Check Misses Undefined
Code QuizUsing unknown Without Narrowing
Code Quiztypeof Cannot Detect Arrays
Code QuizEquality Narrowing Dead Branch
Code QuizNon-null Assertion Hides Real Bug
Code QuizTruthiness Narrowing Drops Zero
Code QuizReassignment Resets Narrowing
Code QuizTruthiness Narrowing
QuizType Predicate Return Effect
QuizArray.isArray as Type Guard
Quiznever in Exhaustiveness Checking
QuizNarrowing via Assignment
QuizNon-null Assertion Operator
QuizEquality Narrowing
QuizNarrowing Literal and Union Types
QuizNarrowing Loss in Closures
Quiztypeof Guards for Primitives
QuizControl Flow Analysis Basics
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?