Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- interface Options {
- type: "boolean" | "number" | "string" | "array";
- }
- type InferredOptionType<O extends Options> =
- O extends { type: "array" } ? Array<string | number> :
- O extends { type: "boolean" } ? boolean :
- O extends { type: "number" } ? number :
- O extends { type: "string" } ? string :
- unknown;
- type Result<T = {}> = T & {
- [key: string]: unknown
- }
- class OBJ<T> {
- add<K extends string, O extends Options>(key: K, options: O) {
- return new OBJ<T & { [key in K]: InferredOptionType<O> }>()
- }
- get result() {
- return {} as { [key in keyof Result<T>]: Result<T>[key] }
- }
- }
- const obj = new OBJ()
- obj
- .add('foo', {
- type: 'array'
- })
- .add('bar', {
- type: 'string'
- })
- .add('test', {
- type: 'number'
- })
- .result
- .bar
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement