@jsonjoy.com/json-type
Version:
High-performance JSON Pointer implementation
29 lines (28 loc) • 1.95 kB
TypeScript
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;
}