type is optional on concrete classes
Fix types of base object
Protocol definition and early tests
Testcases for new type logic