Comments (7)
How difficult it would be to achieve is entirely separate and not something I have knowledge of.
However, I can't conceive of any code where this narrowing would be incorrect, including your example.
from typescript.
I would say this is a design limitation.
unkown
is not a union of the types you listed, so the compiler can't narrow the type in the else
branch. This would require a type "unknown
, except number
", which would first require negated types (#4196).
from typescript.
Why isn't unknown
a union of all possible types? I would expect it to be a named shorthand for null | undefined | string | boolean | number | bigint | symbol | object
since that includes every possible JS value.
from typescript.
See: #39498 (comment)
from typescript.
oof, ok - that issue is actually my precise need for that exact same library. That's very unfortunate.
from typescript.
Consider this working code
function nonNumericTypeof(typeofx: "string" | "boolean" | "symbol" | "undefined" | "object" | "function") {
return true;
}
function foo(x: unknown) {
const t = typeof x;
if (t === 'number' || t === 'bigint') {
return false;
}
t; // const t: "string" | "boolean" | "symbol" | "undefined" | "object" | "function"
return nonNumericTypeof(t);
}
Conceivably, type information could embed the results of typeof
comparisons (both true and false branches because typeof
range is finite) . However, there are reasons why that very hard to integrate into current TypeScript, one of which is that number
, string
, etc. can be promoted to objects for type comparison.
from typescript.
This issue has been marked as "Duplicate" and has seen no recent activity. It has been automatically closed for house-keeping purposes.
from typescript.
Related Issues (20)
- Add persian translation to docs HOT 1
- No error when accessing setter-only properties HOT 2
- Preserve `set`-only accessors in declaration emit
- NoInfer introduced in 5.4 is undocumented HOT 5
- Compile does not produce an error when parameters in overriding class method in child class have narrower type than the parameters of this method in the parent class HOT 4
- Update getTimezoneOffset JSDoc for clarity HOT 1
- ts80007 is incorrect at times? HOT 3
- Problems with __esModule marker in JS/TS mixed node16 environemnt HOT 3
- Error reported only in `node_modules` directory HOT 3
- Incorrect Chinese Translation for 'initializer' and Incorrect Use of Chinese Quotation Marks
- Shadowed import bindings require cross-file knowledge even with `isolatedModules` HOT 4
- Hover references/docs for JSX files (like for regular HTML and CSS files) HOT 7
- `noImplicitAny` infers `any` for typed parameter of union's common function HOT 2
- Wrapper Function that Runs Generic Function Doesn't Honor Generic Function Return Type HOT 2
- Memory Leak disposing oldProgram HOT 2
- A class with only getters satisfies some type without checking for the possibility of changing these fields HOT 2
- "Output generation failed" when transpiling "test.d.abc.ts" HOT 4
- Type literals in declaration files are emitted with comment blocks from the wrong source file
- Declaration emit of private properties should strip jsdoc
- Typescript enum suggestion Chinese garbled code HOT 4
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.