Comments (3)
Or even something like the following, where the corresponding type for every key is indexable, with the top-level entries of said type being used as the key/value pairs.
Contrived example:
interface DatabaseSchema extends DBSchema {
posts: Record<string, Post>; // Like `list: { key: string; value: Post }`
metadata: {
times: { joined: string, lastSeen: string };
counts: { posts: number; privateMessages: number };
};
}
from idb.
Relevant: jcalz's answer to "Generic Functions for Various Data Types in TypeScript" on StackOverflow
from idb.
This seems doable. A separate generic parameter would need to be introduced for the key. That key can then be used to narrow the type of the value. Here's an updated version of the StoreValue
type and the get
function. If the Key
parameter on the StoreValue
type has a default value of any
, then this isn't a breaking change.
export type StoreValue<
DBTypes extends DBSchema | unknown,
StoreName extends StoreNames<DBTypes>,
Key = any
> = DBTypes extends DBSchema
? (DBTypes[StoreName] & (Key extends StoreKey<DBTypes, StoreName> ? { key: Key } : {}))['value']
: any;
get<
Name extends StoreNames<DBTypes>,
Key extends StoreKey<DBTypes, Name> | IDBKeyRange
>(
storeName: Name,
query: Key
): Promise<StoreValue<DBTypes, Name, Key> | undefined>;
This works on the initial example. When anIDBKeyRange
is used as the key, the value is the full union of types.
from idb.
Related Issues (20)
- Tx does not rollback ? HOT 1
- Unable to build project with Node 18 with yarn link HOT 3
- Error when building Next.js HOT 1
- Force to close DB HOT 1
- Typescript Schema typing error HOT 3
- Remove Edge-specific code HOT 1
- KnownKeys on ts > 4.2 HOT 1
- How to delete an object store? HOT 4
- Aborting a Transaction HOT 4
- Can't do async data migrations in the sync upgrade function HOT 7
- need method to bulk insert HOT 3
- Incorrect type of cursor value HOT 9
- Firebase Warning: Original error: (0 , _idb.openDB) is not a function. (app/idb-get). HOT 1
- IDBPTransaction TxStores type checking support HOT 1
- Typescript: cannot compose schema from multiple files HOT 1
- cannot delete particular data in store using IDBKeyRange and cursor. HOT 4
- idb does not detect changes HOT 1
- index.count and db.countFromIndex doesnt work in safari HOT 5
- Open Is Still Successful If Upgrade Throws Exception
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 idb.