typocomath/src/generic/arithmetic.ts

23 lines
749 B
TypeScript

import {ReflectionFunction, stringifyType, typeOf} from '@deepkit/type'
import type {Dependencies, Signature, Signatures, OneType} from '../interfaces/type.js'
interface LocalSignatures<T> {
one: (a: T) => OneType<T>
}
export const square =
<T>(dep: Dependencies<'multiply', T>): Signature<'square', T> =>
z => dep.multiply(z, z)
const sqRefl = ReflectionFunction.from(square)
console.log(
' For generic square I know that:',
sqRefl,
sqRefl.getParameterNames(),
sqRefl.getParameterType('dep'),
"\n final dep type:",
stringifyType(sqRefl.getParameterType('dep')))
console.log(' because', typeOf<LocalSignatures<number>['one']>())
console.log(' readable:', stringifyType(typeOf<LocalSignatures<number>['one']>()))