Each time a table-valued parameter is used from a database API (ADO.NET, ODBC, etc) using the appropriate parameter-binding methods, recompiles occur. These are caused by RPC-code that fills in the TVP on the server side. Using SSMS or SQLCMD does not cause these recompiles because SQL-Stmt path (rather than RPC) is used. This happens in all database APIs, all versions of SQL Server since the feature was introduced.
This has lead some users to conclude that, because of the recompiles involved, the feature should not be used.