diff --git a/mypy/checkexpr.py b/mypy/checkexpr.py
index 016668b46105..4829b99231cd 100644
--- a/mypy/checkexpr.py
+++ b/mypy/checkexpr.py
@@ -45,6 +45,7 @@
 from mypy.typevars import fill_typevars
 from mypy.visitor import ExpressionVisitor
 from mypy.funcplugins import get_function_plugin_callbacks, PluginCallback
+from mypy.typeanal import make_optional_type
 
 from mypy import experiments
 
@@ -1928,10 +1929,11 @@ def analyze_super(self, e: SuperExpr, is_lvalue: bool) -> Type:
             return AnyType()
 
     def visit_slice_expr(self, e: SliceExpr) -> Type:
+        expected = make_optional_type(self.named_type('builtins.int'))
         for index in [e.begin_index, e.end_index, e.stride]:
             if index:
                 t = self.accept(index)
-                self.chk.check_subtype(t, self.named_type('builtins.int'),
+                self.chk.check_subtype(t, expected,
                                        index, messages.INVALID_SLICE_INDEX)
         return self.named_type('builtins.slice')
 
diff --git a/test-data/unit/check-expressions.test b/test-data/unit/check-expressions.test
index 1d840269da42..ae1498acdadd 100644
--- a/test-data/unit/check-expressions.test
+++ b/test-data/unit/check-expressions.test
@@ -1006,6 +1006,16 @@ a[None:]
 a[:None]
 [builtins fixtures/slice.pyi]
 
+[case testNoneSliceBoundsWithStrictOptional]
+# flags: --strict-optional
+from typing import Any
+a = None # type: Any
+a[None:1]
+a[1:None]
+a[None:]
+a[:None]
+[builtins fixtures/slice.pyi]
+
 
 -- String interpolation
 -- --------------------