Like components, helpers and modifiers can also have their behavior in templates described by a Signature type.
Helpers
A helper signature has two keys: Args and Return. The Args key is further broken down into Named and Positional elements, representing respectively the expected types of the named and positional arguments your helper expects to receive.
import Helper from '@ember/component/helper';
type Positional = Array<number>;
type Named = { andThenMultiplyBy?: number };
export interface AddSignature {
Args: {
Positional: Positional;
Named: Named;
};
Return: number;
}
export default class AddHelper extends Helper<AddSignature> {
public compute(values: Positional, named: Named): number {
let total = values.reduce((sum, next) => sum + next, 0);
if (typeof named.andThenMultiplyBy === 'number') {
total *= named.andThenMultiplyBy;
}
return total;
}
}
import { helper } from '@ember/component/helper';
export interface AddSignature {
Args: {
Positional: Array<number>;
Named: { andThenMultiplyBy?: number };
};
Return: number;
}
const add = helper<AddSignature>((values, { andThenMultiplyBy }) => {
let total = values.reduce((sum, next) => sum + next, 0);
if (typeof andThenMultiplyBy === 'number') {
total *= andThenMultiplyBy;
}
return total;
});
export default add;
import { helper } from '@ember/component/helper';
const add = helper((values: Array<number>, named: { andThenMultiplyBy?: number }) => {
let total = values.reduce((sum, next) => sum + next, 0);
if (typeof named.andThenMultiplyBy === 'number') {
total *= named.andThenMultiplyBy;
}
return total;
});
export default add;
Modifiers
A modifier's Args are split into Named and Positional as with helpers, but unlike helpers they have no Return, since modifiers don't return a value. Their signtures can, however, specify the type of DOM Element they are compatible with.