I think you should change this line:
typeahead="customer.customerFirstName for customer in getCustomers($viewValue) | filter:$viewValue"
It seems that the syntax should be:
typeahead="<name> for <name> in getCustomers($viewValue) | filter:$viewValue"
if <name>
in the first position is not equal to <name>
in second position it returns an error.
Try to change your code to:
typeahead="customer for customer in getCustomers($viewValue) | filter:$viewValue"
And in your javascript put customerFirstName
direcly in returned array.