You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently named capture groups are a bit of a pain in TypeScript:
All names are of type string even if the regexp doesn't have that named group.
You need to use non-null assertion for .groups even when that is the only possibility.
Suggestion
I propose making RegExp higher order on its named capture groups so that .groups is well typed.
// Would have type: RegExp<{ year: string, month: string }>constdate=/(?<year>[0-9]{4})-(?<month>[0-9]{2})/constmatch=someString.match(date)if(match){// match.groups type would be { year: string, month: string }// currently is undefined | { [key: string]: string }}// Would have type RegExp<{ year: string, month?: string }>constoptionalMonth=/(?<year>[0-9]{4})(-(?<month>[0-9]{2}))?/
Checklist
My suggestion meets these guidelines:
[✓] This wouldn't be a breaking change in existing TypeScript/JavaScript code
[✓] This wouldn't change the runtime behavior of existing JavaScript code
[✓] This could be implemented without emitting different JS based on the types of the expressions
[✓] This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, etc.)
Search Terms
named regexp, named capture groups
Motivation
Currently named capture groups are a bit of a pain in TypeScript:
.groupseven when that is the only possibility.Suggestion
I propose making
RegExphigher order on its named capture groups so that.groupsis well typed.Checklist
My suggestion meets these guidelines: