Comments (6)
Not really sure how to reason about this one.
On the one hand, TS assumes that if you write code, you did so for a reason. So if there's a default
case, then it must be reachable via some means that you know about but we don't, so it's fair game for computing the return type. You wouldn't be allowed to return "foo";
here, for example, and the implicit return undefined;
that exists at the implied exit point of the switch exists by the same logic.
On the other hand, in the absence of the default
, we know the switch
is exhaustive, so any code in the default
block shouldn't need a return
.
But again, you wrote the default
block for a reason, and didn't throw
out of it, so if that code isn't 100% dead, it ought to be an error. Otherwise you'll get an unsound undefined
later in your program in a way that's really hard to diagnose.
I would just delete, or return
or throw
here for clarity. The current behavior doesn't seem wrong enough justify endangering people who do have an actually-reachable default
(as is somewhat common in the case of e.g. side effects or array access)
from typescript.
The default case here is designed to allow the TypeScript compiler (tsc) to automatically detect when a new variant of the Size type is introduced. If the size in the default branch is of the new variant instead of never, it will trigger an error, reminding developers that a case has been missed.
from typescript.
from typescript.
Yes, I can use the return type of the function as a workaround to perform exhaustive checks on the switch statement.
from typescript.
For absolute correctness, currently, the only way is to wrap the switch statement within a block function to ensure that no case is missed. Although typescript-eslint can also perform such checks, it's not always easy to configure typescript-eslint properly in every project.
from typescript.
It would be great if tsc can add an options config for switch exhausiveness check.
from typescript.
Related Issues (20)
- ESNext Set methods HOT 1
- isolatedDeclarations should not have warning for functions that have no return statements HOT 4
- Trivia ownership documentation seems to be incorrect
- `--isolatedDeclarations` allows generator functions HOT 1
- Allow `--noCheck` on the CLI with top-level `--build`
- Union in template literal simplifying unexpectedly HOT 5
- Default import from an ESM package into a CommonJS project with esModuleInterop is faulty HOT 3
- Watch cannot handle large amount of file changes HOT 1
- generator next type should be inferred as union (instead of intersection) of yields' types OR just unknown
- Elementwise elaboration fails to be found for properties mixed with incompatible index signatures using intersections
- Error when accessing properties on `globalThis` with the same name of a global variable
- [NewErrors] 5.5.0-dev.20240428 vs 5.4.5 HOT 49
- Private class properties prevent `Readonly` type inference HOT 2
- [ServerErrors][TypeScript] 5.5.0-dev.20240428 HOT 12
- [ServerErrors][JavaScript] 5.5.0-dev.20240428 HOT 9
- Strange runtime caching bug involving `as const` and `const T` generic HOT 1
- When relatively importing a `.d.ts` file in a declaration file, TypeScript loads a `.ts` file instead HOT 7
- Calling decorators with @ loses type safety with function as argument HOT 2
- Include error maps in the typescript libraries for web apis to give developers easy access to potential thrown exceptions HOT 5
- jsdoc @type does not resolve a type
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from typescript.