struct
Shape guard for objects; supports exact key checking and key-level optional fields via optionalKey(...).
import {arrayOf,optional,optionalKey,struct,isString,isNumber,} from 'is-kit';const isUser = struct({id: isNumber,name: isString,nickname: optionalKey(isString),displayName: optionalKey(optional(isString)),});// isUser: Guard<{// id: number;// name: string;// nickname?: string;// displayName?: string | undefined;// }>const input: unknown = {id: 42,name: 'Neko',nickname: 'nya',};if (isUser(input)) {input.nickname?.toUpperCase(); // input narrowed to User shape}const isExactUser = struct({ id: isNumber, name: isString },{ exact: true });isExactUser({ id: 1, name: 'A' }); // trueisExactUser({ id: 1, name: 'A', extra: 1 }); // false (extra keys rejected)const isTeam = struct({name: isString,members: arrayOf(isUser),});// Nested structs compose cleanly; members inherits the User guard.isTeam({name: 'core',members: [{ id: 1, name: 'Neko' }],}); // trueisTeam({name: 'core',members: [{ id: 1, name: 'Neko', nickname: 123 }],}); // false (nickname is not a string)// Use optionalKey(...) when the property may be omitted.// Use optional(...) when the property exists but its value may be undefined.