Add new options, generics, and unit tests for routers.
Review Request #12915 — Created March 23, 2023 and submitted — Latest diff uploaded
BaseRouter
(andBackbone.Router
) lacked some of the capabilities
available to models and views. It wasn't possible to provide typed
custom options, for example. Our typing also didn't allow for routes to
be dynamically-constructed.This change introduces new generics when subclassing
BaseRouter
or
Backbone.Router
, allowing an interface to be provided for custom
options. This mixes into an interface (now provided in our version of
the Backbone typings) of standard options for the class.The standard options have been updated to not require
routes
to be
specified.The combined results are passed to
preinitialize
,initialize
, and
constructor
. This follows the same patterns used inModel
and
View
.The
routes
static attribute can now be a function, which returns the
routes for an instance. This is run with the instance being passed as
this
.A new
RoutesHash
type has been exported. This maps to
Backbone.RoutesHash
, and is easier to reference without importing
Backbone.Unit tests have been addd to test all static attributes/fucntion
behavior. Since our testing uses TypeScript, the type-related issues
were also caught by tests.
Unit tests pass.