Thanks for the great article Ákos Kőműves.
I've played with your example and converted it to a type predicate function.
The isCollaboratorExternal function accepts a collaborator parameter with type string and uses the Array.some function (because of this issue) to check if externalCollaboratorTypes has the collaboratorType and returns the type predicate.
Thus, after the check operation the type of data.collaborator.type will be "External Editor" | "External Administrator".
I think types are more aligned with the logic in this solution.
Here is the link for TypeScript Playground: TS Playground