lib/util/strTemplate.ts (15 lines of code) (raw):

export type TemplateFunc<R> = (dict: any) => R; export function strTemplate<T extends Array<string | number>>( strings: readonly string[], ...keys: T ): TemplateFunc<string> { return ((...values: any) => { const dict = values[values.length - 1] || {}; const result = [strings[0]]; keys.forEach((key, i) => { const value = Number.isInteger(key as number) ? values[key] : dict[key]; result.push(value, strings[i + 1]); }); return result.join(""); }) as any; }