Files
NapCatQQ/.pnpm-store/v3/files/2e/1493bf5f57e36a2e501d293f805ce010d376efeaa2202353106f543f2a1ee6b17de5a61366b3b5ac36eaea03f0163e07b1ab04270c0d9ca88e062cc72be846
TanTan e311ca3275
Build NapCat Artifacts / Windows Loader Test (push) Canceled after 0s
Build NapCat Artifacts / Type Check & Test (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Framework (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Shell (push) Canceled after 0s
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

37 lines
1.3 KiB
Plaintext

import { CreateType } from '../create/type.mjs';
import { OptionalKind } from '../symbols/index.mjs';
import { Discard } from '../discard/index.mjs';
import { Never } from '../never/index.mjs';
import { Optional } from '../optional/index.mjs';
import { UnionCreate } from './union-create.mjs';
// ------------------------------------------------------------------
// TypeGuard
// ------------------------------------------------------------------
import { IsOptional } from '../guard/kind.mjs';
// prettier-ignore
function IsUnionOptional(types) {
return types.some(type => IsOptional(type));
}
// prettier-ignore
function RemoveOptionalFromRest(types) {
return types.map(left => IsOptional(left) ? RemoveOptionalFromType(left) : left);
}
// prettier-ignore
function RemoveOptionalFromType(T) {
return (Discard(T, [OptionalKind]));
}
// prettier-ignore
function ResolveUnion(types, options) {
const isOptional = IsUnionOptional(types);
return (isOptional
? Optional(UnionCreate(RemoveOptionalFromRest(types), options))
: UnionCreate(RemoveOptionalFromRest(types), options));
}
/** `[Json]` Creates an evaluated Union type */
export function UnionEvaluated(T, options) {
// prettier-ignore
return (T.length === 1 ? CreateType(T[0], options) :
T.length === 0 ? Never(options) :
ResolveUnion(T, options));
}