import { A } from "free-types-core"; import { Union2Tuple } from "../../utils.js"; import { $Accessor, $Iterator } from "./types.js"; export { $Struct }; interface $Struct> extends $Iterator { value: $GetValue; path: $GetPath; done: $Done; } type GetKeys = Extract, (keyof T)[]>; interface $GetValue extends $Accessor { type: T[Keys[A]]; } interface $GetPath extends $Accessor { type: [Keys[A]]; } interface $Done extends $Accessor { type: A extends Keys['length'] ? true : false; }