diff --git a/clippy_lints/src/manual_let_else.rs b/clippy_lints/src/manual_let_else.rs
index 8a915127c3c..521d02db80f 100644
--- a/clippy_lints/src/manual_let_else.rs
+++ b/clippy_lints/src/manual_let_else.rs
@@ -74,6 +74,7 @@ impl<'tcx> LateLintPass<'tcx> for ManualLetElse {
             if let StmtKind::Local(local) = stmt.kind;
             if let Some(init) = local.init;
             if local.els.is_none();
+            if local.ty.is_none();
             if init.span.ctxt() == stmt.span.ctxt();
             if let Some(if_let_or_match) = IfLetOrMatch::parse(cx, init);
             then {
diff --git a/tests/ui/manual_let_else.rs b/tests/ui/manual_let_else.rs
index 9e5df65b74d..9046c0affb5 100644
--- a/tests/ui/manual_let_else.rs
+++ b/tests/ui/manual_let_else.rs
@@ -197,4 +197,8 @@ fn not_fire() {
 
     // Already a let-else
     let Some(a) = (if let Some(b) = Some(Some(())) { b } else { return }) else { panic!() };
+
+    // If a type annotation is present, don't lint as
+    // expressing the type might be too hard
+    let v: () = if let Some(v_some) = g() { v_some } else { panic!() };
 }