diff --git a/.changeset/quiet-bears-protect.md b/.changeset/quiet-bears-protect.md new file mode 100644 index 0000000000..7cc72e9477 --- /dev/null +++ b/.changeset/quiet-bears-protect.md @@ -0,0 +1,5 @@ +--- +'@tanstack/table-core': patch +--- + +Preserve `undefined` in deep accessor value types when an optional parent key is used. diff --git a/packages/table-core/package.json b/packages/table-core/package.json index 8e7a77a3b5..e83359b270 100644 --- a/packages/table-core/package.json +++ b/packages/table-core/package.json @@ -47,7 +47,7 @@ "clean": "rimraf ./build", "test:lib": "vitest", "test:lib:dev": "pnpm test:lib --watch", - "test:types": "tsc --noEmit", + "test:types": "tsc --noEmit && tsc --noEmit -p tsconfig.test-d.json", "build": "pnpm build:rollup && pnpm build:types", "build:rollup": "rollup --config rollup.config.mjs", "build:types": "tsc --emitDeclarationOnly" diff --git a/packages/table-core/src/utils.ts b/packages/table-core/src/utils.ts index c1f02a7c61..81fa04003d 100755 --- a/packages/table-core/src/utils.ts +++ b/packages/table-core/src/utils.ts @@ -65,8 +65,9 @@ type DeepKeysPrefix< ? `${TPrefix}.${DeepKeys & string}` : never -export type DeepValue = - T extends Record +export type DeepValue = T extends null | undefined + ? undefined + : T extends Record ? TProp extends `${infer TBranch}.${infer TDeepProp}` ? DeepValue : T[TProp & string] diff --git a/packages/table-core/tests/columnHelper.test-d.ts b/packages/table-core/tests/columnHelper.test-d.ts new file mode 100644 index 0000000000..221e734117 --- /dev/null +++ b/packages/table-core/tests/columnHelper.test-d.ts @@ -0,0 +1,27 @@ +import { createColumnHelper } from '../src' + +type Expect = T +type Equal = + (() => G extends T ? 1 : 2) extends () => G extends U ? 1 : 2 + ? true + : false + +type Row = { + user: { + salary?: { + amount: number + } + } +} + +const columnHelper = createColumnHelper() + +columnHelper.accessor('user.salary.amount', { + cell: (info) => { + const amount = info.getValue() + + type _ = Expect> + + return amount + }, +}) diff --git a/packages/table-core/tsconfig.test-d.json b/packages/table-core/tsconfig.test-d.json new file mode 100644 index 0000000000..4d58c0b4c8 --- /dev/null +++ b/packages/table-core/tsconfig.test-d.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": true, + "rootDir": "." + }, + "include": ["src/**/*", "tests/**/*.test-d.ts"] +}