struct
Shape guard for objects; supports exact key checking via options.
import { arrayOf, optional, struct, isString, isNumber } from 'is-kit';const isUser = struct({id: isNumber,name: isString,nickname: optional(isString),});// isUser: Guard<{ id: number; name: string; nickname?: 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)