Files
typebox/test/static/exclude.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

100 lines
3.5 KiB
TypeScript

import { Type, TLiteral, TUnion } from '@alkdev/typebox'
import { Expect } from './assert'
{
const T = Type.Exclude(Type.String(), Type.String())
Expect(T).ToStaticNever()
}
{
const T = Type.Exclude(Type.String(), Type.Number())
Expect(T).ToStatic<string>()
}
{
const T = Type.Exclude(Type.Union([Type.Number(), Type.String(), Type.Boolean()]), Type.Number())
Expect(T).ToStatic<boolean | string>()
}
// ------------------------------------------------------------------------
// TemplateLiteral | TemplateLiteral
// ------------------------------------------------------------------------
{
const A = Type.TemplateLiteral([Type.Union([Type.Literal('A'), Type.Literal('B'), Type.Literal('C')])])
const B = Type.TemplateLiteral([Type.Union([Type.Literal('A'), Type.Literal('B'), Type.Literal('C')])])
const T = Type.Exclude(A, B)
Expect(T).ToStaticNever()
}
{
const A = Type.TemplateLiteral([Type.Union([Type.Literal('A'), Type.Literal('B'), Type.Literal('C')])])
const B = Type.TemplateLiteral([Type.Union([Type.Literal('A'), Type.Literal('B')])])
const T = Type.Exclude(A, B)
Expect(T).ToStatic<'C'>()
}
{
const A = Type.TemplateLiteral([Type.Union([Type.Literal('A'), Type.Literal('B'), Type.Literal('C')])])
const B = Type.TemplateLiteral([Type.Union([Type.Literal('A')])])
const T = Type.Exclude(A, B)
Expect(T).ToStatic<'C' | 'B'>()
}
// ------------------------------------------------------------------------
// TemplateLiteral | Union
// ------------------------------------------------------------------------
{
const A = Type.TemplateLiteral([Type.Union([Type.Literal('A'), Type.Literal('B'), Type.Literal('C')])])
const B = Type.Union([Type.Literal('A'), Type.Literal('B'), Type.Literal('C')])
const T = Type.Exclude(A, B)
Expect(T).ToStaticNever()
}
{
const A = Type.TemplateLiteral([Type.Union([Type.Literal('A'), Type.Literal('B'), Type.Literal('C')])])
const B = Type.Union([Type.Literal('A'), Type.Literal('B')])
const T = Type.Exclude(A, B)
Expect(T).ToStatic<'C'>()
}
{
const A = Type.TemplateLiteral([Type.Union([Type.Literal('A'), Type.Literal('B'), Type.Literal('C')])])
const B = Type.Union([Type.Literal('A')])
const T = Type.Exclude(A, B)
Expect(T).ToStatic<'C' | 'B'>()
}
// ------------------------------------------------------------------------
// Union | TemplateLiteral
// ------------------------------------------------------------------------
{
const A = Type.Union([Type.Literal('A'), Type.Literal('B'), Type.Literal('C')])
const B = Type.TemplateLiteral([Type.Union([Type.Literal('A'), Type.Literal('B'), Type.Literal('C')])])
const T = Type.Exclude(A, B)
Expect(T).ToStaticNever()
}
{
const A = Type.Union([Type.Literal('A'), Type.Literal('B'), Type.Literal('C')])
const B = Type.TemplateLiteral([Type.Union([Type.Literal('A'), Type.Literal('B')])])
const T = Type.Exclude(A, B)
Expect(T).ToStatic<'C'>()
}
{
const A = Type.Union([Type.Literal('A'), Type.Literal('B'), Type.Literal('C')])
const B = Type.TemplateLiteral([Type.Union([Type.Literal('A')])])
const T = Type.Exclude(A, B)
Expect(T).ToStatic<'C' | 'B'>()
}
// https://github.com/sinclairzx81/typebox/issues/737
{
const U = Type.Union([Type.Literal('A'), Type.Literal('B')])
const T = Type.Object({
type: Type.Exclude(U, Type.Literal('A')),
})
Expect(T).ToStatic<{ type: 'B' }>()
}
{
const U = Type.Union([Type.Literal('A'), Type.Literal('B'), Type.Literal('C')])
const T = Type.Object({
type: Type.Exclude(U, Type.Literal('A')),
})
Expect(T).ToStatic<{ type: 'B' | 'C' }>()
}