diff --git a/mypy/binder.py b/mypy/binder.py
--- a/mypy/binder.py
+++ b/mypy/binder.py
@@ -8,9 +8,28 @@
 from mypy.erasetype import remove_instance_last_known_values
 from mypy.join import join_simple
 from mypy.literals import Key, literal, literal_hash, subkeys
-from mypy.nodes import AssignmentExpr, Expression, IndexExpr, MemberExpr, NameExpr, RefExpr, Var
+from mypy.nodes import (
+    AssignmentExpr,
+    Expression,
+    IndexExpr,
+    MemberExpr,
+    NameExpr,
+    RefExpr,
+    TypeInfo,
+    Var,
+)
 from mypy.subtypes import is_same_type, is_subtype
-from mypy.types import AnyType, NoneType, PartialType, Type, TypeOfAny, UnionType, get_proper_type
+from mypy.types import (
+    AnyType,
+    NoneType,
+    PartialType,
+    Type,
+    TypeOfAny,
+    TypeType,
+    UnionType,
+    get_proper_type,
+)
+from mypy.typevars import fill_typevars_with_any
 
 BindableExpression: _TypeAlias = Union[IndexExpr, MemberExpr, AssignmentExpr, NameExpr]
 
@@ -439,8 +458,11 @@ def top_frame_context(self) -> Iterator[Frame]:
 
 
 def get_declaration(expr: BindableExpression) -> Type | None:
-    if isinstance(expr, RefExpr) and isinstance(expr.node, Var):
-        type = expr.node.type
-        if not isinstance(get_proper_type(type), PartialType):
-            return type
+    if isinstance(expr, RefExpr):
+        if isinstance(expr.node, Var):
+            type = expr.node.type
+            if not isinstance(get_proper_type(type), PartialType):
+                return type
+        elif isinstance(expr.node, TypeInfo):
+            return TypeType(fill_typevars_with_any(expr.node))
     return None

diff --git a/test-data/unit/check-statements.test b/test-data/unit/check-statements.test
--- a/test-data/unit/check-statements.test
+++ b/test-data/unit/check-statements.test
@@ -1073,6 +1073,10 @@ a = A()
 del a.x, a.y # E: "A" has no attribute "y"
 [builtins fixtures/tuple.pyi]
 
+[case testDelStmtWithTypeInfo]
+class Foo: ...
+del Foo
+Foo + 1  # E: Trying to read deleted variable "Foo"
 
 [case testDelStatementWithAssignmentSimple]
 a = 1

"Trying to read deleted variable" false negative when deleting class
```py
class Foo: ...
del Foo

print(Foo) # no error
```
[playground](https://mypy-play.net/?mypy=latest&python=3.10&flags=show-error-context%2Cshow-error-codes%2Cstrict%2Ccheck-untyped-defs%2Cdisallow-any-decorated%2Cdisallow-any-expr%2Cdisallow-any-explicit%2Cdisallow-any-generics%2Cdisallow-any-unimported%2Cdisallow-incomplete-defs%2Cdisallow-subclassing-any%2Cdisallow-untyped-calls%2Cdisallow-untyped-decorators%2Cdisallow-untyped-defs%2Cno-implicit-optional%2Cno-implicit-reexport%2Clocal-partial-types%2Cstrict-equality%2Cwarn-incomplete-stub%2Cwarn-redundant-casts%2Cwarn-return-any%2Cwarn-unreachable%2Cwarn-unused-configs%2Cwarn-unused-ignores&gist=1dea89d07b0f24e562595bf221e4f7d8)

mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testReturnInIterator mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testAssert mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testReturnValue mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testMinusAssign mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testRaiseStatement mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testIfStatement mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testReturnSubtype mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testRaiseClassObject mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWhileStatement mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testReturnWithoutAValue mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testMulAssign mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testReturnNoneInFunctionReturningNone mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testRaiseClassObjectCustomInit mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testForStatement mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testMatMulAssign mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testReturnInGenerator mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testRaiseExceptionType mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testBreakStatement mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testEmptyReturnInGenerator mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testRaiseNonExceptionTypeFails mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testContinueStatement mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testDivAssign mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testNoReturnInGenerator mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testRaiseUnion mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testForStatementTypeComments mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testEmptyReturnInNoneTypedGenerator mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testRaiseNonExceptionUnionFails mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testPowAssign mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testNonEmptyReturnInNoneTypedGenerator mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testForStatementMultipleTypeComments mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testRaiseFromStatement mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testSubtypesInOperatorAssignment mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testTryExceptStatement mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testRaiseFromClassobject mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testPlusAssign mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testTryExceptWithinFunction mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testAdditionalOperatorsInOpAssign mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testTryFinallyStatement mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testExceptWithTypeType mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testTryExceptFlow mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testSimpleTryExcept mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testInplaceOperatorMethods mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testExceptWithMultipleTypes2 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testTryWithElse mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testTypeErrorInBlock mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testExceptWithMultipleTypes3 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testInplaceSetitem mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testRedefinedFunctionInTryWithElse mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testTypeErrorInvolvingBaseException mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testExceptionVariableReuseInDeferredNode1 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testExceptWithoutType mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testExceptWithMultipleTypes4 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testSimpleTryExcept2 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testExceptionVariableReuseInDeferredNode2 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testRaiseWithoutArgument mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testExceptWithAnyTypes mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testBaseClassAsExceptionTypeInExcept mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testExceptionVariableReuseInDeferredNode3 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testExceptWithMultipleTypes mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testReuseTryExceptionVariable mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testMultipleExceptHandlers mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testExceptionVariableReuseInDeferredNode4 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testInvalidExceptionCallable mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testReuseDefinedTryExceptionVariable mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testDelStmtWithAttribute mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testExceptionVariableReuseInDeferredNode5 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testTupleValueAsExceptionType mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testDelStatementWithTuple mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testExceptionVariableReuseInDeferredNode6 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testDelStatementWithAssignmentClass mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testInvalidTupleValueAsExceptionType mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testArbitraryExpressionAsExceptionType mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testDelStatementWithConditions mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testSimpleYield mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testOverloadedExceptionType mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldInFunctionReturningAny mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testExceptionWithAnyBaseClass mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldInFunctionReturningFunction mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldInFunctionReturningGenerator mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testDelStatementWithAssignmentSimple mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldInDynamicallyTypedFunction mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testExceptionIsType mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldInFunctionReturningIterable mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithInvalidInstanceReturnType mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldInFunctionReturningObject mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testDelStmtWithIndex mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldFromNotAppliedToNothing mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testDelStatementWithAssignmentTuple mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testTypeInferenceContextAndYield mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldFromAndYieldTogether mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldFromAppliedToAny mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testDelStatementWithAssignmentList mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldFromAny mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldFromInFunctionReturningFunction mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldFromTupleStatement mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldAndReturnWithoutValue mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldFromNotIterableReturnType mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldFromGenericCall mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testSimpleWith mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldWithNoValue mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldFromNotAppliedIterator mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtAndInvalidEnter mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtAndInvalidExit mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldWithNoValueWhenValueRequired mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtAndMissingEnter mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldFromCheckIncompatibleTypesTwoIterables mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtAndMissingExit mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testYieldWithExplicitNone mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtAndMultipleExprs mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtAndMultipleResults mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testSimpleYieldFromWithIterator mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtAndResult mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtComplexTypeComment mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtAndComplexTarget mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtBoolExitReturnInStub mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeAndFuncDef2 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtBoolExitReturnWithResultFalse mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtTypeComment mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeBasics mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeAndFuncDef3 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtTupleTypeComment mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeAndFuncDef mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtBoolExitReturnOkay mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeAndFuncDef4 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeAndImportStar mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeNestedWith2 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeAndImport1 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeMultipleContextManagers mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeNestedWith1 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeInnerAndOuterScopes mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeAndImport2 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeMultipleAssignment mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeComplexAssignments mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeAndClass mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeInnerScopeReference mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testWithStmtScopeAndLambda mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testChainedAssignment mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testChainedAssignmentWithType mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testSimpleTypeAlias mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testChainedAssignment2 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testAssignListToStarExpr mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testTypeAliasDefinedInAModule2 mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testTypeOfNonlocalUsed mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testTypeAliasDefinedInAModule mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testTypeOfGlobalUsed mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testTypeOfOuterMostNonlocalUsed mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testAugmentedAssignmentIntFloat mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testAugmentedAssignmentIntFloatMember mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testAugmentedAssignmentIntFloatDict mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testForwardRefsInForStatementImplicit mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testForwardRefsInForStatement mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testGlobalWithoutInitialization mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testForwardRefsInWithStatementImplicit mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testForwardRefsInWithStatement
mypy/test/testcheck.py::TypeCheckSuite::check-statements.test::testDelStmtWithTypeInfo