diff --git a/homeassistant/components/tts/__init__.py b/homeassistant/components/tts/__init__.py
index 8263408c4bb..7def2c84bc0 100644
--- a/homeassistant/components/tts/__init__.py
+++ b/homeassistant/components/tts/__init__.py
@@ -11,7 +11,7 @@ import mimetypes
 import os
 from pathlib import Path
 import re
-from typing import TYPE_CHECKING, Optional, cast
+from typing import TYPE_CHECKING, Any, Optional, cast
 
 from aiohttp import web
 import mutagen
@@ -49,8 +49,6 @@ from homeassistant.util.yaml import load_yaml
 
 from .const import DOMAIN
 
-# mypy: allow-untyped-defs, no-check-untyped-defs
-
 _LOGGER = logging.getLogger(__name__)
 
 TtsAudioType = tuple[Optional[str], Optional[bytes]]
@@ -86,7 +84,7 @@ _RE_VOICE_FILE = re.compile(r"([a-f0-9]{40})_([^_]+)_([^_]+)_([a-z_]+)\.[a-z0-9]
 KEY_PATTERN = "{0}_{1}_{2}_{3}"
 
 
-def _deprecated_platform(value):
+def _deprecated_platform(value: str) -> str:
     """Validate if platform is deprecated."""
     if value == "google":
         raise vol.Invalid(
@@ -253,7 +251,9 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
     if setup_tasks:
         await asyncio.wait(setup_tasks)
 
-    async def async_platform_discovered(platform, info):
+    async def async_platform_discovered(
+        platform: str, info: dict[str, Any] | None
+    ) -> None:
         """Handle for discovered platform."""
         await async_setup_platform(platform, discovery_info=info)
 
@@ -327,7 +327,7 @@ class SpeechManager:
         """Read file cache and delete files."""
         self.mem_cache = {}
 
-        def remove_files():
+        def remove_files() -> None:
             """Remove files from filesystem."""
             for filename in self.file_cache.values():
                 try:
@@ -365,7 +365,11 @@ class SpeechManager:
 
         # Languages
         language = language or provider.default_language
-        if language is None or language not in provider.supported_languages:
+        if (
+            language is None
+            or provider.supported_languages is None
+            or language not in provider.supported_languages
+        ):
             raise HomeAssistantError(f"Not supported language {language}")
 
         # Options
@@ -583,33 +587,33 @@ class Provider:
     name: str | None = None
 
     @property
-    def default_language(self):
+    def default_language(self) -> str | None:
         """Return the default language."""
         return None
 
     @property
-    def supported_languages(self):
+    def supported_languages(self) -> list[str] | None:
         """Return a list of supported languages."""
         return None
 
     @property
-    def supported_options(self):
-        """Return a list of supported options like voice, emotionen."""
+    def supported_options(self) -> list[str] | None:
+        """Return a list of supported options like voice, emotions."""
         return None
 
     @property
-    def default_options(self):
+    def default_options(self) -> dict[str, Any] | None:
         """Return a dict include default options."""
         return None
 
     def get_tts_audio(
-        self, message: str, language: str, options: dict | None = None
+        self, message: str, language: str, options: dict[str, Any] | None = None
     ) -> TtsAudioType:
         """Load tts audio file from provider."""
         raise NotImplementedError()
 
     async def async_get_tts_audio(
-        self, message: str, language: str, options: dict | None = None
+        self, message: str, language: str, options: dict[str, Any] | None = None
     ) -> TtsAudioType:
         """Load tts audio file from provider.
 
diff --git a/homeassistant/components/tts/notify.py b/homeassistant/components/tts/notify.py
index c53788f89b8..041638f830f 100644
--- a/homeassistant/components/tts/notify.py
+++ b/homeassistant/components/tts/notify.py
@@ -1,20 +1,22 @@
 """Support notifications through TTS service."""
+from __future__ import annotations
+
 import logging
+from typing import Any
 
 import voluptuous as vol
 
 from homeassistant.components.notify import PLATFORM_SCHEMA, BaseNotificationService
 from homeassistant.const import ATTR_ENTITY_ID, CONF_NAME
-from homeassistant.core import split_entity_id
+from homeassistant.core import HomeAssistant, split_entity_id
 import homeassistant.helpers.config_validation as cv
+from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
 
 from . import ATTR_LANGUAGE, ATTR_MESSAGE, DOMAIN
 
 CONF_MEDIA_PLAYER = "media_player"
 CONF_TTS_SERVICE = "tts_service"
 
-# mypy: allow-untyped-calls, allow-untyped-defs, no-check-untyped-defs
-
 _LOGGER = logging.getLogger(__name__)
 
 PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
@@ -27,7 +29,11 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
 )
 
 
-async def async_get_service(hass, config, discovery_info=None):
+async def async_get_service(
+    hass: HomeAssistant,
+    config: ConfigType,
+    discovery_info: DiscoveryInfoType | None = None,
+) -> TTSNotificationService:
     """Return the notify service."""
 
     return TTSNotificationService(config)
@@ -36,13 +42,13 @@ async def async_get_service(hass, config, discovery_info=None):
 class TTSNotificationService(BaseNotificationService):
     """The TTS Notification Service."""
 
-    def __init__(self, config):
+    def __init__(self, config: ConfigType) -> None:
         """Initialize the service."""
         _, self._tts_service = split_entity_id(config[CONF_TTS_SERVICE])
         self._media_player = config[CONF_MEDIA_PLAYER]
         self._language = config.get(ATTR_LANGUAGE)
 
-    async def async_send_message(self, message="", **kwargs):
+    async def async_send_message(self, message: str = "", **kwargs: Any) -> None:
         """Call TTS service to speak the notification."""
         _LOGGER.debug("%s '%s' on %s", self._tts_service, message, self._media_player)
 
diff --git a/pylint/plugins/hass_enforce_type_hints.py b/pylint/plugins/hass_enforce_type_hints.py
index 2b99dde8c0d..f7c4d66f2e2 100644
--- a/pylint/plugins/hass_enforce_type_hints.py
+++ b/pylint/plugins/hass_enforce_type_hints.py
@@ -2127,6 +2127,35 @@ _INHERITANCE_MATCH: dict[str, list[ClassTypeHintMatch]] = {
             ],
         ),
     ],
+    "tts": [
+        ClassTypeHintMatch(
+            base_class="Provider",
+            matches=[
+                TypeHintMatch(
+                    function_name="default_language",
+                    return_type=["str", None],
+                ),
+                TypeHintMatch(
+                    function_name="supported_languages",
+                    return_type=["list[str]", None],
+                ),
+                TypeHintMatch(
+                    function_name="supported_options",
+                    return_type=["list[str]", None],
+                ),
+                TypeHintMatch(
+                    function_name="default_options",
+                    return_type=["dict[str, Any]", None],
+                ),
+                TypeHintMatch(
+                    function_name="get_tts_audio",
+                    arg_types={1: "str", 2: "str", 3: "dict[str, Any] | None"},
+                    return_type="TtsAudioType",
+                    has_async_counterpart=True,
+                ),
+            ],
+        ),
+    ],
     "update": [
         ClassTypeHintMatch(
             base_class="Entity",