Comments (4)
@RyanCavanaugh Logically the method you suggested should behave exactly the same as the one I mentioned above. However when I tested with the code below, only the key and value part works correctly, the overlay does not. Invoking a function on the overlay produces an error message:
This expression is not callable. Type 'String' has no call signatures.
The code I used:
type SuperRecord<Key extends keyof any, Value, Overlay = {}> = {
[E in Key]: E extends keyof Overlay ? Overlay[E]: Value;
};
interface K extends SuperRecord<string, string, { func1(): void; }> {
}
let k: K = ...
k["str"] = "val"; // works fine
k.func1(); // error
k.toString(); // works fine
from typescript.
This seems like just an exact duplicate of #17867.
You can already write
type SuperRecord<Key extends keyof any, Value, Overlay = {}> = {
[E in Key]: E extends keyof Overlay ? Overlay[E]: Value;
};
to get the generic behavior on an index signature's output type, nothing new is needed.
from typescript.
Right, you'd still need rest signatures. But K
would be declared as this:
type O = { func1(): void; };
interface K extends SuperRecord<keyof O, string, O> {
// TODO: Be able to uncomment.
// [...rest: string]: string
}
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 preferTypeOnlyAutoImports to protocol.UserPreferences
- typeof with identically named type and value causes invalid .d.ts output HOT 7
- Surprising circularity when parameter within base type expression refers to the class itself
- [isolatedDeclarations][5.5] Type annotations needed for literals containing enum values HOT 2
- Defer TransformFlags Calculation HOT 1
- [isolatedDeclarations][5.5] Adding `satisfies` to a const expression makes it require explicit type annotation HOT 11
- [isolatedDeclarations][5.5] Autofix does not work when JSX prop contains a dash `-`
- Subtracting Date objects shows a TypeScript error, but actually works. HOT 4
- Problem with typing a NestKey type
- type inference issue with dynamic template literals HOT 1
- Unable to type nested fields in a Node.js module. HOT 5
- Scope confusion with reused signatures
- Declaration references expanded type paramater
- Design Meeting Notes, 3/29/2024
- Design Meeting Notes, 4/12/2024
- Design Meeting Notes, 4/16/2024
- Design Meeting Notes, 4/23/2024
- Design Meeting Notes, 4/26/2024
- Design Meeting Notes, 4/30/2024 HOT 1
- tsc --init update 2024 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.