type Tail = T extends [...infer _, infer Last] ? Last : never; type RemoveLast = T extends [...infer Rest, infer _] ? Rest : never; type InvertOpen = T extends "(" ? ")" : T extends "[" ? "]" : T extends "{" ? "}" : never; type ValidClose = Current extends ")" | "}" | "]" ? InvertOpen> extends Current ? true : false : false; type IsValidParentheses = S extends `${infer F}${infer R}` ? F extends "(" | "{" | "[" ? IsValidParentheses : ValidClose extends true ? IsValidParentheses> : false : Stack["length"] extends 0 ? true : false; export type Result1 = IsValidParentheses<"()">; // ^? export type Result2 = IsValidParentheses<"()[]{}">; // ^? export type Result3 = IsValidParentheses<"(]">; // ^?