diff --git a/addon/-private/types.ts b/addon/-private/types.ts index 57b622662..1b496e0b1 100644 --- a/addon/-private/types.ts +++ b/addon/-private/types.ts @@ -37,6 +37,9 @@ export interface Helper { } export type Thunk = + // No Args + | (() => []) + | (() => void) // plain array / positional args | (() => Required['positional']) // plain named args diff --git a/package-lock.json b/package-lock.json index ef18049b2..500c00bed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "@glimmer/tracking": "^1.0.4", "@nullvoxpopuli/eslint-configs": "^1.4.0", "@semantic-release/changelog": "^5.0.1", - "@semantic-release/git": "^9.0.1", + "@semantic-release/git": "^9.0.0", "@types/ember__application": "^3.16.3", "@types/ember__array": "^3.16.4", "@types/ember__component": "^3.16.6", diff --git a/tests/unit/types-test.ts b/tests/unit/types-test.ts index cb2a9e7fd..f4abe1538 100644 --- a/tests/unit/types-test.ts +++ b/tests/unit/types-test.ts @@ -1,6 +1,6 @@ /* eslint-disable no-console */ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { LifecycleResource, Resource } from 'ember-resources'; +import { LifecycleResource, Resource, useResource } from 'ember-resources'; import type { Named } from 'ember-resources'; @@ -22,3 +22,14 @@ export function Issue108TypeTest() { return issue108p2a.args.named?.foo; } + +// https://github.com/NullVoxPopuli/ember-resources/issues/48 +export function Issue48TypeTest(): unknown { + class TestResource extends Resource {} + + return class TestCaseComponent { + test = useResource(this, TestResource, () => {}); + testArray = useResource(this, TestResource, () => []); + testVoid = useResource(this, TestResource); + }; +} diff --git a/tests/unit/use-resource-test.ts b/tests/unit/use-resource-test.ts index 1b5f0c597..5609b3409 100644 --- a/tests/unit/use-resource-test.ts +++ b/tests/unit/use-resource-test.ts @@ -147,6 +147,24 @@ module('useResource', function () { }); }); + test('does not need args', async function (assert) { + class TestResource extends Resource { + foo = 3; + } + + class Test { + dataArray = useResource(this, TestResource, () => []); + dataVoid = useResource(this, TestResource, () => {}); + dataOmitted = useResource(this, TestResource); + } + + let foo = new Test(); + + assert.equal(foo.dataArray.foo, 3); + assert.equal(foo.dataVoid.foo, 3); + assert.equal(foo.dataOmitted.foo, 3); + }); + module('in templates', function (hooks) { setupRenderingTest(hooks);