TState and TTrigger must extend Enum