feat(typescript-types): Add KeyPaths<T, F, O>

This commit is contained in:
T. R. Bernstein
2025-07-15 15:09:26 +02:00
parent 4ec764de9e
commit 3997eaa864
3 changed files with 81 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
import type { KeyPaths } from '@/key-paths.js'
import { expect } from 'tstyche'
interface ExampleObject {
nullvalue: null
simplevalue: string
config: {
nullvalue: null
simplevalue: string
}
}
expect<KeyPaths<ExampleObject>>().type.toBe<'simplevalue' | 'config.simplevalue'>()
expect<KeyPaths<ExampleObject, never>>().type.toBe<
'nullvalue' | 'simplevalue' | 'config.nullvalue' | 'config.simplevalue'
>()
expect<KeyPaths<ExampleObject, null>>().type.toBe<'simplevalue' | 'config.simplevalue'>()
expect<KeyPaths<ExampleObject, string>>().type.toBe<'nullvalue' | 'config.nullvalue'>()
expect<KeyPaths<ExampleObject, null, { separator: '-' }>>().type.toBe<'simplevalue' | 'config-simplevalue'>()
expect<KeyPaths<ExampleObject, null, { leavesOnly: false }>>().type.toBe<
'simplevalue' | 'config' | 'config.simplevalue'
>()
expect<KeyPaths<any, string>>().type.toBe<unknown>()
expect<KeyPaths<any, never>>().type.toBe<unknown>()
expect<KeyPaths<ExampleObject, any>>().type.toBeAssignableTo<never>()
expect<KeyPaths<ExampleObject, unknown>>().type.toBeAssignableTo<never>()
expect<KeyPaths<any, any>>().type.toBeAssignableTo<never>()
expect<KeyPaths<never, any>>().type.toBeAssignableTo<never>()
expect<KeyPaths<never, never>>().type.toBeAssignableTo<never>()