From ca3bf7f06d894d2bdc3e89a4eccaf463dfe68815 Mon Sep 17 00:00:00 2001 From: Frank Tan Date: Sat, 14 Apr 2018 12:09:19 -0700 Subject: [PATCH] Re-type `helper` from `@ember/component/helper` (#24986) * Re-type `helper` from @ember/component/helper Previous typing caused an error about using private name `Ember.Helper` when generating declaration files. Fortunately, the previous typings were incorrect anyway, so we can remove the reference to `Ember.Helper` and thus fix the issue. Relevant links: * https://github.com/Microsoft/TypeScript/issues/5711 * https://github.com/Microsoft/TypeScript/issues/6307 * https://www.emberjs.com/api/ember/2.18/functions/@ember%2Fcomponent%2Fhelper/helper * https://github.com/emberjs/ember.js/blob/v2.18.2/packages/ember-glimmer/lib/helper.ts#L120 * Add test for `helper` from @ember/component/helper --- types/ember/index.d.ts | 15 ++++++++++++++- types/ember/test/helper.ts | 8 ++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/types/ember/index.d.ts b/types/ember/index.d.ts index 740ff1308c..c825647e49 100755 --- a/types/ember/index.d.ts +++ b/types/ember/index.d.ts @@ -3442,7 +3442,20 @@ declare module '@ember/component/checkbox' { declare module '@ember/component/helper' { import Ember from 'ember'; export default class Helper extends Ember.Helper { } - export const helper: typeof Ember.Helper.helper; + /** + * In many cases, the ceremony of a full `Helper` class is not required. + * The `helper` method create pure-function helpers without instances. For + * example: + * ```app/helpers/format-currency.js + * import { helper } from '@ember/component/helper'; + * export default helper(function(params, hash) { + * let cents = params[0]; + * let currency = hash.currency; + * return `${currency}${cents * 0.01}`; + * }); + * ``` + */ + export function helper(helperFn: (params: any[], hash?: any) => string): any; } declare module '@ember/component/text-area' { diff --git a/types/ember/test/helper.ts b/types/ember/test/helper.ts index efe3ce33d7..cba5709b10 100755 --- a/types/ember/test/helper.ts +++ b/types/ember/test/helper.ts @@ -25,3 +25,11 @@ const CurrentUserEmailHelper = Ember.Helper.extend({ .get('email'); }, }); + +import { helper } from '@ember/component/helper'; + +function typedHelp(/*params, hash*/) { + return 'my type of help'; +} + +export default helper(typedHelp);