/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import { Value, ValueSchema } from "../../core";
import { TypedSchema } from "../modular-schema";
/**
 * {@link ValueSchema} to allowed types for that schema.
 * @alpha
 */
export declare type TypedValue<TValue extends ValueSchema> = {
    [ValueSchema.Nothing]: undefined;
    [ValueSchema.Number]: number;
    [ValueSchema.String]: string;
    [ValueSchema.Boolean]: boolean;
    [ValueSchema.Serializable]: Value;
}[TValue];
/**
 * {@link ValueSchema} for privative types.
 * @alpha
 */
export declare type PrimitiveValueSchema = ValueSchema.Number | ValueSchema.String | ValueSchema.Boolean;
/**
 * Extract names from a list of `LabeledTreeSchema`.
 *
 * @remarks
 * This uses the inner name from `typeInfo` to avoid the unneeded branding that `T["name"]` has.
 * @alpha
 */
export declare type NamesFromSchema<T extends TypedSchema.LabeledTreeSchema[]> = T extends [
    infer Head,
    ...infer Tail
] ? [
    TypedSchema.Assume<Head, TypedSchema.LabeledTreeSchema>["typeInfo"]["name"],
    ...NamesFromSchema<TypedSchema.Assume<Tail, TypedSchema.LabeledTreeSchema[]>>
] : [];
/**
 * @alpha
 */
export declare type ValuesOf<T> = T[keyof T];
//# sourceMappingURL=schemaAwareUtil.d.ts.map