There is nothing built for that purpose in the Thinkorswim language at this time. However there is one potential workaround. It only applies to the root symbol and NOT the actual contract. For example the root contract for Euro futures is "/6E" while the current live contract is "/6EU20". It works for "/6E" but not for the live contract.
While testing this the platform was performing very poorly so there was a a significant delay in this code acknowledging the futures contract when initially loading a ticker symbol on the chart. Perhaps when the platform is not overloaded it will react more quickly. But like I said, this is a workaround so don't try using this for anything that considered "mission critical" until you use this for a while and get to know how well it works under various conditions.
rec trackChangeEvents = if HasContractChangeevent() then 1 else trackChangeEvents[1];
AddLabel(yes, if trackChangeEvents > 0 then "Futures Contract" else "Non-Futures", Color.WHITE);