ngrx-traits icon indicating copy to clipboard operation
ngrx-traits copied to clipboard

Error in generated typescript definitions

Open Toeler opened this issue 8 months ago • 8 comments

In the @ngrx-traits/signals package, the with-state-logger and with-sync-to-web-storage files are generating type definitions that fail to compile.

This can be seen here: https://stackblitz.com/edit/ngrx-signal-store-starter-7bcgrp?file=node_modules%2F%40ngrx-traits%2Fsignals%2Flib%2Fwith-sync-to-web-storage%2Fwith-sync-to-web-storage.d.ts

I'm not sure why this still is able to run, but if you right click on withSyncToWebStorage in the imports and view the definitions, you will se the error. In my personal project I can't even get it to run if I import any functions at all from @ngrx-traits/signals, even if I don't use them.

The generated definition file is something like this:

export declare function withSyncToWebStorage<Input extends SignalStoreFeatureResult>({ key, type: storageType, saveStateChangesAfterMs, restoreOnInit, filterState, onRestore, }: {
    key: string;
    type: 'session' | 'local';
    restoreOnInit?: boolean;
    saveStateChangesAfterMs?: number;
    filterState?: (state: Input['state']) => Partial<Input['state']>;
    onRestore?: (store: Prettify<SignalStoreSlices<Input['state']> & Input['signals'] & Input['methods'] & StateSignal<Prettify<Input['state']>>>) => void;
}): import("@ngrx/signals").SignalStoreFeature<import("@ngrx/signals/src/signal-store-models").EmptyFeatureResult & Input extends infer T ? { [K in keyof T]: (import("@ngrx/signals/src/signal-store-models").EmptyFeatureResult & Input)[K]; } : never, {
    state: Omit<Omit<{}, "saveToStorage" | "loadFromStorage" | "clearFromStore">, never>;
    signals: Omit<Omit<{}, "saveToStorage" | "loadFromStorage" | "clearFromStore">, never>;
    methods: Omit<Omit<{}, "saveToStorage" | "loadFromStorage" | "clearFromStore"> & {
        saveToStorage(): void;
        loadFromStorage(): boolean;
        clearFromStore(): void;
    }, never>;
} & import("@ngrx/signals/src/signal-store-models").EmptyFeatureResult>;

With the error

Type 'EmptyFeatureResult & Input extends infer T ? { [K in keyof T]: (EmptyFeatureResult & Input)[K]; } : never' does not satisfy the constraint 'SignalStoreFeatureResult'.
  Type '{}' is missing the following properties from type 'SignalStoreFeatureResult': state, signals, methods(2344)

Toeler avatar May 31 '24 04:05 Toeler