feat(typescript-types): Make Assign assignable to Generics by removing optionals
This commit is contained in:
@@ -11,21 +11,21 @@ interface OptionsWithRequired {
|
||||
interface DefaultValues {
|
||||
tag: 'Max Mustermann'
|
||||
age: 17
|
||||
relations: []
|
||||
relations: Array<OptionsWithRequired>
|
||||
}
|
||||
|
||||
expect<Assign<OptionsWithRequired, DefaultValues, { name: 'Another Name' }>>().type.toBe<{
|
||||
name: 'Another Name'
|
||||
tag: 'Max Mustermann'
|
||||
age: 17
|
||||
relations: []
|
||||
relations: Array<OptionsWithRequired>
|
||||
}>()
|
||||
|
||||
expect<Assign<OptionsWithRequired, DefaultValues, { name: 'Another Name'; age: 18 }>>().type.toBe<{
|
||||
name: 'Another Name'
|
||||
tag: 'Max Mustermann'
|
||||
age: 18
|
||||
relations: []
|
||||
relations: Array<OptionsWithRequired>
|
||||
}>()
|
||||
|
||||
interface Options {
|
||||
@@ -39,8 +39,14 @@ expect<Assign<Options, DefaultValues, {}>>().type.toBe<{
|
||||
}>()
|
||||
|
||||
interface SpecifiedOptions extends Options {}
|
||||
|
||||
expect<Assign<Options, DefaultValues, SpecifiedOptions>>().type.toBe<{
|
||||
tag: 'Max Mustermann'
|
||||
age: 17
|
||||
}>()
|
||||
|
||||
type SomethingRequiringAllOptions<Opts extends Required<Options>> = Opts
|
||||
type SomethingProvidingDefaultOptions<Opts extends Options = {}> = SomethingRequiringAllOptions<
|
||||
Assign<Options, DefaultValues, Opts>
|
||||
>
|
||||
|
||||
expect<SomethingProvidingDefaultOptions<{ age: 5 }>>().type.toBe<{ tag: 'Max Mustermann'; age: 5 }>()
|
||||
|
||||
11
packages/typescript-types/test/is-undefined.tst.ts
Normal file
11
packages/typescript-types/test/is-undefined.tst.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import type { IsUndefined } from '@/is-undefined.js'
|
||||
import { expect } from 'tstyche'
|
||||
|
||||
expect<IsUndefined<undefined>>().type.toBe<true>()
|
||||
|
||||
expect<IsUndefined<1>>().type.toBe<false>()
|
||||
expect<IsUndefined<'somestring'>>().type.toBe<false>()
|
||||
expect<IsUndefined<null>>().type.toBe<false>()
|
||||
expect<IsUndefined<unknown>>().type.toBe<false>()
|
||||
expect<IsUndefined<any>>().type.toBe<false>()
|
||||
expect<IsUndefined<never>>().type.toBe<false>()
|
||||
21
packages/typescript-types/test/pick-assignable.tst.ts
Normal file
21
packages/typescript-types/test/pick-assignable.tst.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import type { PickAssignable } from '@/pick-assignable.js'
|
||||
import { expect } from 'tstyche'
|
||||
|
||||
interface Example {
|
||||
name: string
|
||||
age: number
|
||||
}
|
||||
|
||||
expect<PickAssignable<Example, 'name' | 'age'>>().type.toBe<Example>()
|
||||
expect<PickAssignable<Example, any>>().type.toBe<Example>()
|
||||
|
||||
expect<PickAssignable<Example, 'name'>>().type.toBe<{ name: string }>()
|
||||
|
||||
expect<PickAssignable<Example, 'nonexisting'>>().type.toBe<{}>()
|
||||
expect<PickAssignable<Example, never>>().type.toBe<{}>()
|
||||
|
||||
expect<PickAssignable<unknown, 'age'>>().type.toBe<{}>()
|
||||
expect<PickAssignable<any, 'age'>>().type.toBe<{}>()
|
||||
|
||||
expect<PickAssignable<undefined, 'age'>>().type.toBe<{}>()
|
||||
expect<PickAssignable<never, 'age'>>().type.toBe<{}>()
|
||||
Reference in New Issue
Block a user