UNPKG

@jsonjoy.com/json-type

Version:

High-performance JSON Pointer implementation

29 lines (28 loc) 1.95 kB
import { Value } from './Value'; import { TypeSystem } from '../system/TypeSystem'; import type * as classes from '../type'; import type { TypeBuilder } from '../type/TypeBuilder'; import type { Printable } from 'tree-dump/lib/types'; import type { ResolveType } from '../system/types'; export type UnObjType<T> = T extends classes.ObjType<infer U> ? U : never; export type UnObjValue<T> = T extends ObjValue<infer U> ? U : never; export type UnObjFieldTypeVal<T> = T extends classes.ObjectFieldType<any, infer U> ? U : never; export type ObjFieldToTuple<F> = F extends classes.ObjectFieldType<infer K, infer V> ? [K, V] : never; export type ToObject<T> = T extends [string, unknown][] ? { [K in T[number] as K[0]]: K[1]; } : never; export type ObjValueToTypeMap<F> = ToObject<{ [K in keyof F]: ObjFieldToTuple<F[K]>; }>; export declare class ObjValue<T extends classes.ObjType<any>> extends Value<T> implements Printable { static new: (system?: TypeSystem) => ObjValue<classes.ObjType<[]>>; get system(): TypeSystem; get t(): TypeBuilder; keys(): string[]; get<K extends keyof ObjValueToTypeMap<UnObjType<T>>>(key: K): Value<ObjValueToTypeMap<UnObjType<T>>[K] extends classes.Type ? ObjValueToTypeMap<UnObjType<T>>[K] : classes.Type>; field<F extends classes.ObjectFieldType<any, any>>(field: F | ((t: TypeBuilder) => F), data: ResolveType<UnObjFieldTypeVal<F>>): ObjValue<classes.ObjType<[...UnObjType<T>, F]>>; add<K extends string, V extends classes.Type>(key: K, type: V | ((t: TypeBuilder) => V), data: ResolveType<V>): ObjValue<classes.ObjType<[...UnObjType<T>, classes.ObjectFieldType<K, V>]>>; set<K extends string, V extends classes.Type>(key: K, value: Value<V>): ObjValue<classes.ObjType<[...UnObjType<T>, classes.ObjectFieldType<K, V>]>>; merge<O extends ObjValue<any>>(obj: O): ObjValue<classes.ObjType<[...UnObjType<T>, ...UnObjType<O['type']>]>>; toString(tab?: string): string; }