website/errors/sealed.internalInterface.md
<?php declare(strict_types = 1);
namespace Vendor {
/** @internal */
interface InternalInterface {}
}
namespace App {
/** @phpstan-sealed \Vendor\InternalInterface */
class MyBase {}
}
The @phpstan-sealed PHPDoc tag references an interface that is marked as @internal. Internal interfaces are not part of the public API of their package and may change or be removed without notice. Referencing an internal interface in a @phpstan-sealed tag creates a dependency on an implementation detail that could break at any time.
Use a public (non-internal) interface in the @phpstan-sealed tag:
-/** @phpstan-sealed \Vendor\InternalInterface */
+/** @phpstan-sealed \Vendor\PublicInterface */
class MyBase {}
If the interface is internal to the same package, the error will not be reported. The @internal restriction only applies to cross-package usage.