@glint/environment-ember-loose
Version:
A Glint environment to support loose-mode Ember.js projects
46 lines (42 loc) • 1.48 kB
TypeScript
import { DirectInvokable, NamedArgs } from '@glint/template/-private/integration';
export type ActionNamedArgs<T> = NamedArgs<{
value?: keyof T;
}>;
export type ActionResult<T, Args extends ActionNamedArgs<T>> = undefined extends Args['value']
? T
: Args['value'] extends keyof T
? T[Args['value']]
: T;
export type ActionKeyword = DirectInvokable<{
<Ret, Args extends ActionNamedArgs<Ret>, Params extends unknown[]>(
f: (...rest: Params) => Ret,
args?: Args
): (...rest: Params) => ActionResult<Ret, Args>;
<A, Ret, Args extends ActionNamedArgs<Ret>, Params extends unknown[]>(
f: (a: A, ...rest: Params) => Ret,
a: A,
args?: Args
): (...rest: Params) => ActionResult<Ret, Args>;
<A, B, Ret, Args extends ActionNamedArgs<Ret>, Params extends unknown[]>(
f: (a: A, b: B, ...rest: Params) => Ret,
a: A,
b: B,
args?: Args
): (...rest: Params) => ActionResult<Ret, Args>;
<A, B, C, Ret, Args extends ActionNamedArgs<Ret>, Params extends unknown[]>(
f: (a: A, b: B, c: C, ...rest: Params) => Ret,
a: A,
b: B,
c: C,
args?: Args
): (...rest: Params) => ActionResult<Ret, Args>;
<A, B, C, D, Ret, Args extends ActionNamedArgs<Ret>, Params extends unknown[]>(
f: (a: A, b: B, c: C, d: D, ...rest: Params) => Ret,
a: A,
b: B,
c: C,
d: D,
args?: Args
): (...rest: Params) => ActionResult<Ret, Args>;
(action: string, ...rest: unknown[]): (...rest: unknown[]) => unknown;
}>;