feat(typescript-types): Adapt Get to KeyPaths and KeyPath changes

This commit is contained in:
T. R. Bernstein
2025-07-29 00:41:00 +02:00
parent eba47b51bd
commit 9cb4bc2f06
2 changed files with 47 additions and 32 deletions

View File

@@ -1,19 +1,29 @@
import type { Get } from '@/get.js'
import { expect } from 'tstyche'
interface Example1 {
requiredKey: number
optionalKey?: number
unknownNonOptionalKey: unknown
undefinedNonOptionalKey: undefined
interface ExampleObject {
nullvalue: null
simplevalue: string
unknownKey: unknown
neverKey: never
subkey: {
undefinedKey: undefined
undefinedOptionalKey?: undefined
optionalKey?: string
objectKey: {
name: string
age: number
age?: number
}
optionalObjectKey?: {
name: string
age?: number
}
arrayKey: [{ name: string; age: number }, 1]
optionalArrayKey?: [{ name: string }, { age?: number }]
}
expect<Get<Example1, 'requiredKey'>>().type.toBe<number>()
expect<Get<Example1, 'optionalKey'>>().type.toBe<number | undefined>()
expect<Get<Example1, 'subkey.age'>>().type.toBe<number>()
expect<Get<Example1, 'unknownNonOptionalKey'>>().type.toBe<unknown>()
// type T = any extends never ? true : false
// type A = Get<ExampleObject, 'simplevalue'>
expect<Get<ExampleObject, 'simplevalue'>>().type.toBe<string>()
expect<Get<ExampleObject, 'optionalObjectKey?.name', {}, never>>().type.toBe<string | undefined>()
expect<Get<ExampleObject, 'optionalObjectKey?.age?', {}, never>>().type.toBe<number | undefined>()
expect<Get<ExampleObject, 'optionalArrayKey?.0.name', {}, never>>().type.toBe<string | undefined>()