import type {Dependencies, Signature} from '../interfaces/type.js' import {$$typeToString} from 'ts-macros' export const square = (dep: Dependencies<'multiply', T>): Signature<'square', T> => z => dep.multiply(z, z) // z => dep.fooBar(z, z) // fails as desired // z => dep.multiply(z, 'foo') // still fails as desired // make sure ts-macros is running function $contains(value: T, ...possible: Array) { // repetition which goes over all the elements in the "possible" array return +["||", [possible], (item: T) => value === item]; } const searchItem = "needle"; console.log("In generic arithmetic") console.log($contains!(searchItem, "erwin", "tj")); // Transpiles to: console.log(false); // OK, record the type of square: square.reflectedType = $$typeToString!(); type Expand = T extends unknown ? { [K in keyof T]: T[K] } : never; type Out = Expand>; console.log("Deps type is", $$typeToString!())