As extra information from the manual:
TStrings implements an abstract class to manage an array of strings. It introduces methods to set and retrieve strings in the array, searching for a particular string, concatenating the strings and so on. It also allows an arbitrary object to be associated with each string.
It also introduces methods to manage a series of name=value settings, as found in many configuration files.
An instance of TStrings is never created directly, instead a descendant class such as TStringList should be created. This is because TStrings is an abstract class which does not implement all methods; TStrings also doesn't store any strings, this is the functionality introduced in descendants such as TStringList.
TStrings implements the IFPObserved interface: when the stringlist is changed, a ooChanged notification is sent to all observers.
https://freepascal.org/docs-html/rtl/classes/tstrings.htmlSo you should never create a TStrings directly byut always use a decendant of TStrings.
BTW. The variable itself (OldVals) is just a pointer so you could leave it as a TStrings because it can still hold a pointer to TStringList (but it doesn't hurt to make also make it a TStringList here just for clarity).
In TComboBox Items is declared as TStrings so it can also hold direct descendants from TStrings and doesn't necessarily need a descendant from TStringList.