$watch
listeners are called when they are registered. If you don't want to execute the code inside of your listener function when you are initializing the watcher, then you can do something like this:
scope.$watch("[type,typeId]", function(oldValue, newValue) {
if (oldValue === newValue) return;
// This code will only be hit when oldValue is different from newValue
init(scope)
}, true);