Files
typebox/test/static/partial.ts
glm-5.1 bd758c2342 Fork from @sinclair/typebox 0.34.49 as @alkdev/typebox
- Rename package from @sinclair/typebox to @alkdev/typebox
- Update author, repository, and homepage to alkdev
- Remove GitHub workflows, .vscode config, and branding assets
- Update all source, test, example, changelog, and task imports
- Update tsconfig.json path mappings
- Clean up readme header (remove upstream badges/branding)
2026-04-23 13:22:31 +00:00

106 lines
2.3 KiB
TypeScript

import { Expect } from './assert'
import { Type, Static } from '@alkdev/typebox'
import * as Types from '@alkdev/typebox'
{
const T = Type.Partial(
Type.Object({
A: Type.String(),
B: Type.String(),
C: Type.String(),
}),
)
type T = Static<typeof T>
Expect(T).ToStatic<{
A?: string
B?: string
C?: string
}>()
}
{
{
const A = Type.Object({ type: Type.Literal('A') })
const B = Type.Object({ type: Type.Literal('B') })
const C = Type.Object({ type: Type.Literal('C') })
const Union = Type.Union([A, B, C])
const Extended = Type.Object({
x: Type.Number(),
y: Type.Number(),
z: Type.Number(),
})
const T = Type.Intersect([Union, Extended])
Expect(T).ToStatic<
(
| {
type: 'A'
}
| {
type: 'B'
}
| {
type: 'C'
}
) & {
x: number
y: number
z: number
}
>()
const P = Type.Partial(T)
Expect(P).ToStatic<
(
| {
type?: 'A' | undefined
}
| {
type?: 'B' | undefined
}
| {
type?: 'C' | undefined
}
) & {
x?: number | undefined
y?: number | undefined
z?: number | undefined
}
>()
}
}
{
// https://github.com/sinclairzx81/typebox/issues/655
const T = Type.Object({
a: Type.ReadonlyOptional(Type.Number()),
b: Type.Readonly(Type.Number()),
c: Type.Optional(Type.Number()),
d: Type.Number(),
})
const R: Types.TObject<{
a: Types.TReadonlyOptional<Types.TNumber>
b: Types.TReadonlyOptional<Types.TNumber>
c: Types.TOptional<Types.TNumber>
d: Types.TOptional<Types.TNumber>
}> = Type.Partial(T)
}
// ------------------------------------------------------------------
// Intrinsic Passthough
// https://github.com/sinclairzx81/typebox/issues/1169
// ------------------------------------------------------------------
// prettier-ignore
{
const T = Type.Partial(Type.Union([Type.Number(), Type.Object({
x: Type.Number()
})]))
Expect(T).ToStatic<number | { x?: number }>
}
// prettier-ignore
{
const T = Type.Partial(Type.Union([Type.Literal(1), Type.Object({
x: Type.Number()
})]))
Expect(T).ToStatic<1 | { x?: number }>
}