Considering the code snippet:
.. List<SObject> lstSObject = sentence == true ? List<typeA__c>() : List<typeB__c>();
Salesforce doesn't explain much as this operator should be straightforward.
And following the principle of the java operator too. https://en.wikipedia.org/wiki/%3F:#Java
To confirm my thought, is the compiler verifying what is bidding on the interface (List) and considering its type itself?