3 ms·
Your examples has groups only typed as { [key: string]: string }. It isn't narrowed down to the actual named capture groups inside the regex. For the whole se
by spartanatreyu 10mo ago
Your examples has groups only typed as { [key: string]: string }.
It isn't narrowed down to the actual named capture groups inside the regex.
For the whole semver example, we'd want something typed as: { major: string, minor: string, patch: string }.
(sidenote for this semver example and not regex in general: they will be strings because a major of "01" and a patch of "3-prerelease" are both valid. You can parse them into ints later depending on what you're actually doing with the semver)
---
For an example of a type narrowed regex in the ts playground, I'll take the lazy route and point you to an example someone else has made:
https://www.typescriptlang.org/play/?ssl=1&ssc=39&pln=1&pc=30#code/JYWwDg9gTgLgBAbzjAnmApgEwEroOYCiAHmHAL5wBmUEIcA5DAM4C0U+6J9A3AFC8B6AXABCAQybAAxnACuTMXnS8pEAHZN4qDJgAiYmOgAKBw1DVwAvMjRZchEgAp6APUcB+ADwp0YqAD4AHUDMBAAWMgBKFg9PEHUYAAsgkIQAJiiYr0wxFBTQjMiAEnoAGgY8eki+VQ14TnQpXCYrGx19QxMYMzUAOgapZzSABlGWAEZhljSwqoBCXrwaWTAmPiE4TbgXdxV1TTh2MAAbMSl0ZtbtLA7jU3RzXqPT84BJNSHRqcnp2fLHEAGKSJco+PzleJqJLlHIocoQSiUJjoGDlTRQYBqPDlJYQFZMSJWfxwAAGRQQuPxvVhZF65Mpq16kKStPpy0ZYKgZBJkTm62EW0FQuFItFYvFEslUolO34GwAwglODBZGJjnAxAB3PzoNToJhMQQCuC4GBiTEtVRQdhSeAQMAwYDqNXAVBwABGEiwcHUcCYqgwezqcAZLWs1xw+GIYGcbi8AEdVVDXXlgpgANSxWRqV3+ADaYhYAC8ALrpyKRdwlSJMoGJd6fYZgIjzRbsta8UO9bOu-lC2XAShwRxdxNiZOoQkIXiCrs9mDcOAbV5DscTlBwYAtPDAABuuvKYjkOfgIHk8Hd6DgYBou+AmG9EjgmvQx2OvRnWw2gtlZDlxoAQWOJgIGfaAAGsWk1V1Eg1Y4egMJ01CDA5QzSK5bEjBwY1cWJDCIGB80LUtywAH1iNdHVQfJMy8eciOLMsK2rWsYGBBt6BGJsW15Ns8VWPg0O7E8jWFAchxHds0l6fD4EseTjwfShMSwKdP02IT50XZch0xMBZHgLc1EYDVkGVcpXTgM8DkBNjYMolNn0SaRYMxKRjlkB8WiPecP0Fb8f12P9RIAZTESh8FVKBMENAKCH9MQwExPA4AAMjgeVEj8M4zHlU4DTgLK1EwY5kt4CN7GjZxgliNQxBALAUkiKpWPYj56E8OqGswfxmt40M+2lIbhq2WUKqjJx6FiZSoE0fJImCcivGRWoeoLRi+ta+t2rCUixFbAbRJG46TpFMbMMqya82m4BZsIhbAhLWIVvUHrIhLVtbLa5x-AO9tBtOwHJVlI64CMGgMFgDdOC3Qw1HOUSAAFmBYTgMFtVHrWgAAuBgvsSIDjneeg4HTBhnjOdBCeJuBMHUEyYYOSR4avNRQPoSoqFOPBeDzcbsOcMB7nMFr8eptRyn5qr6CF7oHmMmsKfOcWSz4KXJtlnoygqUW63FvgkZRtHGhgTGaCgXH6ExTBpH1Em6f1Yz6iIWG-Tc1n2cwEnKG58qLomnDNfllqBmcVtrdtjt1cD4XjPKegvZrUP6HD4rI4NgKADFubgXcXRt1BDdYY2MYec3caOXxDEwLnFD9nRLpjuWRfjndKmqIvUZIE2zZxhhZBJ8ca-oXdve5y1xzZi8r1UEB3RUzB67sAPBdj7WOdkUeO9EgDMALpC1TgUqzEPzFKGgWykJQ536pOO5m4scN-YF+gQBQLotdb+8qj4Thb+Oe+PReggVkFAc4ANxSyj-uAABH95a9B9ooDsAVIG7Dii7TQupzg+iHIgvAhpoF3zgY8LKTB3g23OB2QhsDY7AMdFIcCKAAa9BYUAA https://www.typescriptlang.org/play/?ssl=1&ssc=39&pln=1&pc=3...
You can use a utility library (e.g. ts-regexp, arkregex, etc...), you can use one of the utilities that are shared around the typescript spaces online for the one part you need, or you can make your own utility type.
---
For my use-case, I just want to know that I can change either my code or regex and I'll be alerted before runtime or buildtime if I've forgotten to account for something.
To carry on with the semver example, if a fourth piece of data was added to the incoming string (e.g. product name, build timestamp, build variant, etc...) and I forgot to update both the code and the regex together and instead only updated one, I'd want an alert in my IDE to tell me that I forgot to update the other one.
- matt_kantor 10mo agoThe ts-regexp package `infer`s out of template literal types to do its magic. That's possible from JSDoc too: https://www.typescriptlang.org/play/?filetype=js#code/PQKhCgAIUgBAXApgWwA4BsCGTIG8DO8ATgJYB2A5gL6QAqUMCAnqogCaIBmetkiAHkjJt8kAAYASXOU6IikAHJ9BiYaLIBXZACM5NRBQr4xkAPyLIALkhlEANz2KtuogHlOAUUP4GwcOABjAHsyQkhtTHwAa0R4SABeSAByABYAJj5vJP9QRngWdi48BWc5dy8jAB581iDuCOjYgD4aCvwASTIAIUiYuJA-YGBIEdGx8YnJqfGAPVMgA https://www.typescriptlang.org/play/?filetype=js#code/PQKhCg... The behavior of ts-regexp is not especially related to the `RegExpExecArray` type. That package uses unsafe assertions to implement its API. The only thing that requires TypeScript syntax in the playground you linked is the non-null assertions. Here's that same code in JSDoc mode with the non-null assertions removed (`strictNullChecks` is disabled instead): https://www.typescriptlang.org/play/?filetype=js#code/JYWwDg9gTgLgBAbzjAnmApgEwEroOYCiAHmHAL5wBmUEIcA5DAM4C0U+6J9A3AFC8B6AXABCAQybAAxnACuTMXnS8pEAHZN4qDJgAiYmOgAKBw1DVwAvMjRZchEgAp6APUcB+ADwp0YqAD4AHUDMBAAWMgBKFg9PEHUYAAsgkIQAJiiYr0wxFBTQjMiAEnoAGgY8eki+VQ14TnQpXCYrGx19QxMYMzUAOgapZzSABlGWAEZhljSwqt68GlkwJj4hOHW4F3cVdU04djAAGzEpdGbW7SwO41N0c16D49OASTUh0anJ6dnyxxADKSJco+PzleJqJLlHIocoQSiUJjoGDlTRQYBqPDlBYQJZMSJWfxwAAGRQQ2NxvWhZF6pPJy164KS1Npi3pIKgZCJ1UEwg2fP5AsFQuFItFYvFoq2-DWAGEEpwYLIxIc4GIAO5+dBqdBMJg8ja4GBidEtVRQdhSeAQMAwYDqZXAVBwABGEiwcHUcCYqgwOzqcDpLWslxw+GIYGcbi8AEclRDHXlgpgANSxWRqR3+ADaYhYAC8ALrJyKRdwlSIMgGJV7vYZgIhzQN8QO9dOO1a8jZS4CUOCOFuxsTx1D4hC8PkttswbhwNbPXuD4coODAFp4YAANy15TEcgz8BA8ngzvQcDANA3wEw7okcDV6EOh16442az5UrI0s7AEFDkwIHe0AANYtGqjqJKqhw9AYdpqH6eyBmkFy2KGDgRq4sSGEQMDZrmhbFgAPrEi62qg+Spl4U64fmRYluWlYwICNb0CMdYNhWTa8Ihrb7vq-Ldr2-askwaS9Fh8CWJJe7XpQ6JYKOL7rNxU4znOvbomAsjwKuaiMKqyAKuUjpwIeez-IxEEkQmd6JNIEHolIhyyNeLS7lOz58m+77bJ++oAMpiJQ+BKlAmB6l5BDemIYDongcAAGRwDKiR+CcZgyscupwClaiYIcsW8CG9jhs4wSxGoYggFgKSRHM5lMW89CeBVVWYP4tUccJHYSj1vXeYVKHFU49CxLJUCaPkkTBERXiIrUbU5jRHUMQ1zhhARYiNl1fF9bte0ClKRVhsNWajcA404VNgQFrEc3qG1kQFnVVbMf4W04ss3X7d94pSjtRg0BgsDLpwq6GGopz6gAAswLCcBglpw+a0AAFwMPViS-ocrz0HAyYMI8JzoFjONwJg6h6aDeySBDp5qAB9CVFQxx4LwWZHWhzhgLc5jPRZJNqOUHMlfQ3PdHcukVoTpwCwWfDC8NYs9GUFR84CAt8NDsPw40MBIzQUBo-Q6KYNIOq4+TOq6fURBg16Dl0wzmC45QLMDToQ3oUrEtzAMzhzCbZsrO7djHV7PO6eU9DOxWfv0AHuVB5rXkAGIs3AG4OqbqBa6wOuI3cBtowcviGJgzOKCHqEi97vNR+ulTcmsMN5yQuv66jDCyLjQ7l-QG4uyzppDvTx6nqoIDOnJmBV57XMRyrjOyAP3L6t+mDZ7BypwPlZjb+ilDQOZsHwTblVHDc4vmMhHth84IAoF0yv11eVR8Jw5+HJfPS9P+shQKcL6kptgf3AF-J+Eteiu0UMHLyIopQRVtpoLUpwPS9mgXgPUoCL4QPuClJgrxTanGDtg8BEdf62ikEBFAQDeh0KAA https://www.typescriptlang.org/play/?filetype=js#code/JYWwDg... --- > For my use-case, I just want to know that I can change either my code or regex and I'll be alerted before runtime or buildtime if I've forgotten to account for something. If you can show a concrete example what you want using TypeScript syntax then I'm pretty sure I could port it to JSDoc syntax. (To be clear I'd personally much rather write the TypeScript syntax as I find JSDoc comments annoying & verbose, but they're plenty powerful, being nearly isomorphic to TypeScript annotations.)