How do I define the block visibility for content types and term pages?
If you control the code for the block, then it really is a simple matter of:


Defining the correct cache contexts (path probably)
In the build method, determining the context (getting current node, tax info from the node, and the like.)
Deciding what to output for the context
If you don't want to display it, return and empty build array (or NULL).


If you don't control the block content (e.g. view or 3rd party module), you can do the same as above and use the various methods to render the block from code.