diff --git a/packages/storage/src/__tests__/index.test.ts b/packages/storage/src/__tests__/index.test.ts index 200de6aa2..1ba64e3cd 100644 --- a/packages/storage/src/__tests__/index.test.ts +++ b/packages/storage/src/__tests__/index.test.ts @@ -1315,6 +1315,18 @@ describe('Storage Utils', () => { }); expectTypeOf(item).toEqualTypeOf>(); }); + + it('should define a non-null value when options are passed with a non-null init function', () => { + const item = storage.defineItem(`local:test`, { + init: () => 123, + }); + expectTypeOf(item).toEqualTypeOf>(); + + const item2 = storage.defineItem(`local:test`, { + init: () => Promise.resolve(123), + }); + expectTypeOf(item2).toEqualTypeOf>(); + }); }); }); diff --git a/packages/storage/src/index.ts b/packages/storage/src/index.ts index 76e438251..790d4337f 100644 --- a/packages/storage/src/index.ts +++ b/packages/storage/src/index.ts @@ -749,6 +749,12 @@ export interface WxtStorage { key: StorageItemKey, options: WxtStorageItemOptions & { defaultValue: TValue }, ): WxtStorageItem; + defineItem = {}>( + key: StorageItemKey, + options: WxtStorageItemOptions & { + init: () => TValue | Promise; + }, + ): WxtStorageItem; defineItem = {}>( key: StorageItemKey, options: WxtStorageItemOptions,