The ARIAMixin currently uses string | null for each aria property type. The reason it’s just string rather than a union of valid values is to allow for future, yet unknown, valid values.
However, in TypeScript, we can prevent string from collapsing with literal unions by using string & {}. For instance, ariaCurrent could be typed as "page" | "step" | "location" | (string & {}) | null, suggesting valid options like "page", "step", and "location" while still allowing any other string as a fallback.
There is a related closed issue here: #1184. While that issue suggested disallowing "unknown" values, my suggestion would still permit them but make the known options more discoverable in TypeScript.
The
ARIAMixincurrently usesstring | nullfor each aria property type. The reason it’s juststringrather than a union of valid values is to allow for future, yet unknown, valid values.However, in TypeScript, we can prevent
stringfrom collapsing with literal unions by usingstring & {}. For instance,ariaCurrentcould be typed as"page" | "step" | "location" | (string & {}) | null, suggesting valid options like"page","step", and"location"while still allowing any other string as a fallback.There is a related closed issue here: #1184. While that issue suggested disallowing "unknown" values, my suggestion would still permit them but make the known options more discoverable in TypeScript.