declare type SameKeysWith = T extends object ? { [key in keyof T]?: any; } : T; interface ObjectProto { (v: SameKeysWith): T; extends(ext: SameKeysWith): ObjectProto; } interface ArrayProto { (items: SameKeysWith[]): T[]; extends(extRecord: SameKeysWith): ArrayProto; } export interface ProtoStatic { string(v: string): string; number(v: number): number; notNull(v: any): T; object(base: SameKeysWith): ObjectProto; array(base: SameKeysWith): ArrayProto; readonly empty: unique symbol; } declare const _default: ProtoStatic; export default _default;