import type { Self } from "@tsimpl/core"; export type ReplaceSelf = T extends Self ? TSelf : T extends (...args: infer Args) => infer Result ? (...args: ReplaceSelfInTuple) => ReplaceSelf : T extends readonly (infer Item)[] ? ReadonlyArray> : T extends Array ? Array> : T extends object ? { [Key in keyof T]: ReplaceSelf; } : T; export type ReplaceSelfInTuple = { [Index in keyof TTuple]: ReplaceSelf; };