Closed
Description
Search Terms
catch unknown type
Suggestion
Today I had another situation where I would have wanted #13219, but a less complex feature that would have prevented the bug as well would have been if the error in catch
clauses had the new unknown
type instead of any
, forcing me to narrow it down before accessing properties.
Ideally this would be the same for the Promise
rejection type.
Use Cases
Making error handling more type safe. Currently any
prevents type narrowing.
Examples
This is a real world example of a bug:
let pipeline: Pipeline
try {
;({ body: pipeline } = await buildkiteClient.post('organizations/sourcegraph/pipelines', {
body: buildkitePipeline,
json: true,
}))
} catch (err) {
if (
err.error &&
Array.isArray(err.error.errors) &&
err.errors[0] &&
err.errors[0].field === 'name' &&
err.errors[0].code === 'already_exists'
) {
console.log(`Buildkite pipeline ${repoName} already exists, skipping creation`)
pipeline = await buildkiteClient.get(`organizations/sourcegraph/pipelines/${repoName}`)
} else {
throw err
}
}
Very easy to miss in code review - it should have been err.error.errors
. This is an error returned by a real API.
Checklist
My suggestion meets these guidelines:
- This wouldn't be a breaking change in existing TypeScript / JavaScript code (with a flag)
- 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. new expression-level syntax)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment