I have no idea how this works because @andarist wrote it

This commit is contained in:
Oleg Isonen committed 2022-09-04 10:48:23 +02:00
1 parent 1d5540e3f5
commit cb09f3ef10
1 file changed
+11 -2
+11 -2
View File
@@ -4,9 +4,18 @@ const define = <Name extends string>(name: Name) => {
return `--${name}-${++counter}` as const;
};
type Cast<T1, T2> = T1 extends T2 ? T1 : T2;
type Join<T extends readonly string[], D extends string> = T extends []
? ""
: T extends [string]
? T[0]
: T extends [string, ...infer Rest]
? `${T[0]}${D}${Join<Cast<Rest, string[]>, D>}`
: never;
const use = <Args extends string[]>(...args: Args) => {
type JoinedArgs = `${typeof args[0]}, ${typeof args[1]}, ${typeof args[2]}`;
return `var(${args.join(", ") as JoinedArgs})` as const;
return `var(${args.join(", ") as Join<Args, ", ">})` as const;
};
export const cssVars = { define, use };