<!-- 🚨 STOP 🚨 STOP 🚨 STOP 🚨 Half of all issues filed here are duplicates, answered in the FAQ, or not appropriate for the bug tracker. Even if you think you've found a *bug*, please read the FAQ first, especially the Common "Bugs" That Aren't Bugs section! Please help us by doing the following steps before logging an issue: * Search: https://github.com/Microsoft/TypeScript/search?type=Issues * Read the FAQ: https://github.com/Microsoft/TypeScript/wiki/FAQ Please fill in the *entire* template below. --> <!-- Please try to reproduce the issue with the latest published version. It may have already been fixed. For npm: `typescript@next` This is also the 'Nightly' version in the playground: http://www.typescriptlang.org/play/?ts=Nightly --> **TypeScript Version:** 4.1.2 (strict) <!-- Search terms you tried before logging this (so others can find this issue more easily) --> **Search Terms:** conjunction falsy narrowing **Code** ```ts function foo( k: string | undefined, i: string ) : string { const g = k && i; if( g ) { return k; } return ""; } function bar( k: string | undefined, i: string ) : string { if( k && i ) { return k; } return ""; } ``` **Expected behavior:** I would expect both of these to typecheck in strict - in both cases k is only returned if it is non-falsy. **Actual behavior:** foo() fails to typecheck with the following error: ``` test.ts:4:8 - error TS2322: Type 'string | undefined' is not assignable to type 'string'. Type 'undefined' is not assignable to type 'string'. ``` however, bar() does pass typechecking. **Playground Link:** <!-- A link to a TypeScript Playground "Share" link which demonstrates this behavior --> **Related Issues:** <!-- Did you find other bugs that looked similar? -->