feat(typescript-types): Allow inversion of filter in KeyPaths<T, O, F>

This commit is contained in:
T. R. Bernstein
2025-07-18 19:56:44 +02:00
parent 520a690283
commit 0e7238998d
2 changed files with 20 additions and 8 deletions

View File

@@ -16,12 +16,7 @@ interface ExampleObject {
}
}
expect<KeyPaths<ExampleObject>>().type.toBe<
'simplevalue' | 'optionalKey.simplevalue' | 'unknownKey' | 'config.simplevalue'
>()
expect<KeyPaths<ExampleObject, {}, any>>().type.toBeAssignableTo<never>()
expect<KeyPaths<ExampleObject, {}, unknown>>().type.toBeAssignableTo<never>()
expect<KeyPaths<ExampleObject, {}, never>>().type.toBe<
type AllKeys =
| 'nullvalue'
| 'simplevalue'
| 'optionalKey.nullvalue'
@@ -29,7 +24,14 @@ expect<KeyPaths<ExampleObject, {}, never>>().type.toBe<
| 'unknownKey'
| 'config.nullvalue'
| 'config.simplevalue'
expect<KeyPaths<ExampleObject>>().type.toBe<
'simplevalue' | 'optionalKey.simplevalue' | 'unknownKey' | 'config.simplevalue'
>()
expect<KeyPaths<ExampleObject, {}, any>>().type.toBeAssignableTo<never>()
expect<KeyPaths<ExampleObject, {}, unknown>>().type.toBeAssignableTo<never>()
expect<KeyPaths<ExampleObject, {}, never>>().type.toBe<AllKeys>()
expect<KeyPaths<ExampleObject, { invertFilter: true }, any>>().type.toBe<AllKeys>()
expect<KeyPaths<ExampleObject, {}, null>>().type.toBe<
'simplevalue' | 'optionalKey.simplevalue' | 'unknownKey' | 'config.simplevalue'
>()