Comments (3)
What's the use of being able to write this, if it were allowed?
from typescript.
I came across this issue when writing stricter types for Object.keys(...)
and Object.values(...)
.
They are
type KeysOf<T extends object> = `${keyof T & (string | number)}`; // Simplified.
and
type ValuesOf<T extends object> = T[KeysOf<T>]; // Simplified.
respectively.
The issue is that KeysOf<T>
cannot be used to index type T
even though the type is guaranteed to contain only valid keys, which could be algorithmically deduced from the definition.
from typescript.
The fundamental issue here is consistency. For any concrete type X
, if another type Y
can be used to index it as X[Y]
, then the expression X[`${Y}`]
(if valid) always gives the same resulting type as X[Y]
.
This bug report / suggestion is about keeping this behaviour consistent when extending the same rule to generic types.
Since there are no types that present an exception to the rule, it should work with generics as well.
from typescript.
Related Issues (20)
- Property 'difference' does not exist on type 'Set' HOT 3
- Type narrowing of condition leads to unexpected error for assignment HOT 3
- Increase the distinction between class and interface properties when defining a class or interface
- Add adaptation to class and interface property prompts HOT 1
- Weird behavior with recursive generic types HOT 2
- Array of unions changed to union of arrays in conditional type HOT 4
- tsserver requires `npm` to be installed on `neovim` trough `mason` HOT 2
- RangeError: Maximum call stack size exceeded when calling `getJsDocTags` on getter of class that implements itself
- Class constructors that early return another object still require fields to be assigned HOT 2
- [NewErrors] 5.7.0-dev.20240922 vs 5.6.2 HOT 6
- [ServerErrors][JavaScript] 5.7.0-dev.20240922 vs 5.6.2 HOT 3
- [ServerErrors][TypeScript] 5.7.0-dev.20240922 vs 5.6.2 HOT 7
- IsolatedDeclarations: emitted declarations inconsistent between `transpileDeclaration` API and TypeScript Playground HOT 1
- Inconsistent typechecking with require() in JS and TS HOT 5
- TypeScript fails to narrow union of native Error types HOT 5
- Typed JSON imports HOT 3
- Proposal: Expand `inferFromTypeArguments()` candidates to include heritage elements HOT 1
- `ReadonlySet` and `ReadonlyMap` are lacking `Symbol.toStringTag`
- Wrong type is generated by typescript HOT 6
- wrong type ordering generated by `tsc`? HOT 9
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.