{"record":{"id":"f150ca11cd60d07e","repo":"TanStack/query","slug":"expected-enabled-to-be-a-boolean-or-a-callback-tha","errorCode":null,"errorMessage":"Expected enabled to be a boolean or a callback that returns a boolean","messagePattern":"Expected enabled to be a boolean or a callback that returns a boolean","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/query-core/src/queryObserver.ts","lineNumber":159,"sourceCode":"      TError,\n      TData,\n      TQueryData,\n      TQueryKey\n    >,\n  ): void {\n    const prevOptions = this.options\n    const prevQuery = this.#currentQuery\n\n    this.options = this.#client.defaultQueryOptions(options)\n\n    if (\n      this.options.enabled !== undefined &&\n      typeof this.options.enabled !== 'boolean' &&\n      typeof this.options.enabled !== 'function' &&\n      typeof resolveQueryBoolean(this.options.enabled, this.#currentQuery) !==\n        'boolean'\n    ) {\n      throw new Error(\n        'Expected enabled to be a boolean or a callback that returns a boolean',\n      )\n    }\n\n    this.#updateQuery()\n    this.#currentQuery.setOptions(this.options)\n\n    if (\n      prevOptions._defaulted &&\n      !shallowEqualObjects(this.options, prevOptions)\n    ) {\n      this.#client.getQueryCache().notify({\n        type: 'observerOptionsUpdated',\n        query: this.#currentQuery,\n        observer: this,\n      })\n    }\n","sourceCodeStart":141,"sourceCodeEnd":177,"githubUrl":"https://github.com/TanStack/query/blob/159982c80b844487054155c38ffc760fe4208daf/packages/query-core/src/queryObserver.ts#L141-L177","documentation":"Validation in `QueryObserver.setOptions` (`@tanstack/query-core`). `enabled` must be `undefined`, a `boolean`, a `() => boolean` function, or an object that `resolveQueryBoolean` can collapse to a boolean. Anything else (string, number, Promise, array, opaque object) is rejected to prevent silent misbehavior of the observer's fetch gating.","triggerScenarios":"Passing `enabled: 'yes'`, `enabled: 1`, `enabled: someSignalObject` (where the signal is not a function), `enabled: { default: true }`, or a `Promise<boolean>`; spreading a config where `enabled` came from an untyped JSON source.","commonSituations":"Bridging Angular signals/Preact signals into `enabled` without unwrapping; passing a truthy non-boolean from a form field; receiving `enabled` from a query string or environment variable as a string; refactor that changed a boolean prop to an object.","solutions":["Coerce to boolean: `enabled: Boolean(myValue)` or `enabled: !!myValue`.","Wrap dynamic resolution in a function: `enabled: () => computeEnabled()`.","Unwrap framework signals before passing: `enabled: signal()` for Angular/Preact signals, `enabled: get(value)` for Svelte stores.","Type the options object strictly so TypeScript rejects non-boolean/non-function values upstream."],"exampleFix":"// before\nuseQuery({ queryKey, queryFn, enabled: mySignal })\n// after\nuseQuery({ queryKey, queryFn, enabled: () => mySignal() })","handlingStrategy":"type-guard","validationCode":"function normalizeEnabled(v: unknown): boolean | (() => boolean) | undefined {\n  if (v === undefined) return undefined\n  if (typeof v === 'boolean') return v\n  if (typeof v === 'function') return v as () => boolean\n  throw new Error('enabled must be boolean, () => boolean, or undefined')\n}","typeGuard":"const isValidEnabled = (v: unknown): v is boolean | (() => boolean) | undefined =>\n  v === undefined || typeof v === 'boolean' || typeof v === 'function'","tryCatchPattern":null,"preventionTips":["Always unwrap framework signals before passing to `enabled`.","Coerce environment-derived flags with `Boolean()`.","Type options strictly so non-boolean/non-function values are rejected at compile time.","Add a test that passes each valid `enabled` shape and one invalid value."],"tags":["query-core","query-observer","enabled","validation","configuration"],"backgroundTag":null,"analyzedSha":"159982c80b844487054155c38ffc760fe4208daf","analyzedAt":"2026-08-12T16:21:52.822Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}