feat(typescript-types): Fully rewrite KeyPaths<T,O,F>
This commit is contained in:
@@ -5,6 +5,8 @@ interface ExampleObject {
|
||||
nullvalue: null
|
||||
simplevalue: string
|
||||
optionalKey?: string
|
||||
unknownKey: unknown
|
||||
neverKey: never
|
||||
config: {
|
||||
nullvalue: null
|
||||
simplevalue: string
|
||||
@@ -12,23 +14,26 @@ interface ExampleObject {
|
||||
}
|
||||
|
||||
expect<KeyPaths<ExampleObject>>().type.toBe<'simplevalue' | 'config.simplevalue'>()
|
||||
expect<KeyPaths<ExampleObject, never>>().type.toBe<
|
||||
expect<KeyPaths<ExampleObject, {}, any>>().type.toBeAssignableTo<
|
||||
'nullvalue' | 'simplevalue' | 'optionalKey' | 'config.nullvalue' | 'config.simplevalue'
|
||||
>()
|
||||
expect<KeyPaths<ExampleObject, null>>().type.toBe<'simplevalue' | 'optionalKey' | 'config.simplevalue'>()
|
||||
expect<KeyPaths<ExampleObject, string>>().type.toBe<'nullvalue' | 'config.nullvalue'>()
|
||||
|
||||
expect<KeyPaths<ExampleObject, null, { separator: '-' }>>().type.toBe<
|
||||
'simplevalue' | 'optionalKey' | 'config-simplevalue'
|
||||
expect<KeyPaths<ExampleObject, {}, unknown>>().type.toBeAssignableTo<
|
||||
'nullvalue' | 'simplevalue' | 'optionalKey' | 'config.nullvalue' | 'config.simplevalue'
|
||||
>()
|
||||
expect<KeyPaths<ExampleObject, null, { leavesOnly: false }>>().type.toBe<
|
||||
'simplevalue' | 'optionalKey' | 'config' | 'config.simplevalue'
|
||||
expect<KeyPaths<ExampleObject, {}, never>>().type.toBe<
|
||||
'nullvalue' | 'simplevalue' | 'optionalKey' | 'unknownKey' | 'config.nullvalue' | 'config.simplevalue'
|
||||
>()
|
||||
expect<KeyPaths<ExampleObject, {}, null>>().type.toBe<'simplevalue' | 'optionalKey' | 'config.simplevalue'>()
|
||||
expect<KeyPaths<ExampleObject, {}, string>>().type.toBe<'nullvalue' | 'config.nullvalue'>()
|
||||
|
||||
expect<KeyPaths<ExampleObject, { separator: '-' }>>().type.toBe<'simplevalue' | 'config-simplevalue'>()
|
||||
expect<KeyPaths<ExampleObject, { leavesOnly: false }>>().type.toBe<
|
||||
'simplevalue' | 'config' | 'neverKey' | 'config.simplevalue'
|
||||
>()
|
||||
|
||||
expect<KeyPaths<any, string>>().type.toBeAssignableTo<never>()
|
||||
expect<KeyPaths<any, never>>().type.toBeAssignableTo<never>()
|
||||
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>()
|
||||
expect<KeyPaths<any, {}, string>>().type.toBeAssignableTo<never>()
|
||||
expect<KeyPaths<any, {}, any>>().type.toBeAssignableTo<never>()
|
||||
expect<KeyPaths<never, {}, any>>().type.toBeAssignableTo<never>()
|
||||
expect<KeyPaths<never, {}, never>>().type.toBeAssignableTo<never>()
|
||||
|
||||
expect<KeyPaths<any, {}, never>>().type.toBe<unknown>()
|
||||
|
||||
Reference in New Issue
Block a user