Each component has two interfaces:
The component interface (which we've already covered) lives inside the component, and each of its functions delegate through to the component's implementation.
The workspace interface lives in the
interfaces folder at the top level of workspace, and each of its functions is empty.
We use workspace interfaces to guarantee implementation isolation between components. We check that all components compile against the workspace interfaces, which guarantees that they don't rely on any code that lives inside another component's implementation.
Keeping all the workspace interfaces in one place has the added benefit of giving us one place to look to see all the functionality offered by all of our components.