Skip to main content

WithType Interface

Adds a type symbol to a type for stronger typing.

Signature

/** @sealed */
export interface WithType<out TName extends string = string, out TKind extends NodeKind = NodeKind, out TInfo = unknown>

Type Parameters

Parameter Constraint Default Description
TName string string Same as TreeNodeSchema's "Name" parameter.
TKind NodeKind NodeKind Same as TreeNodeSchema's "Kind" parameter.
TInfo unknown Same as TreeNodeSchema's "Info" parameter: format depends on the Kind.

Remarks

Powers TreeNode's strong typing setup.

Example

Narrow types for overloading based on NodeKind

function getKeys(node: TreeNode & WithType<string, NodeKind.Array>): number[];
function getKeys(node: TreeNode & WithType<string, NodeKind.Map | NodeKind.Object>): string[];
function getKeys(node: TreeNode): string[] | number[];
function getKeys(node: TreeNode): string[] | number[] {
const schema = Tree.schema(node);
switch (schema.kind) {
case NodeKind.Array: {
const arrayNode = node as TreeArrayNode;
const keys: number[] = [];
for (let index = 0; index < arrayNode.length; index++) {
keys.push(index);
}
return keys;
}
case NodeKind.Map:
return [...(node as TreeMapNode).keys()];
case NodeKind.Object:
return Object.keys(node);
default:
throw new Error("Unsupported Kind");
}
}

Properties

Property Alerts Modifiers Type Description
[typeNameSymbol] Deprecated readonly TName Type symbol, marking a type in a way to increase type safety via strong type checking.
[typeSchemaSymbol] readonly TreeNodeSchemaClass<TName, TKind, TreeNode, never, boolean, TInfo> Type symbol, marking a type in a way to increase type safety via strong type checking.

Property Details

[typeNameSymbol]

Type symbol, marking a type in a way to increase type safety via strong type checking.

This API is deprecated and will be removed in a future release.

Use typeSchemaSymbol instead.

Signature

get [typeNameSymbol](): TName;

Type: TName

[typeSchemaSymbol]

Type symbol, marking a type in a way to increase type safety via strong type checking.

Signature

get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, TreeNode, never, boolean, TInfo>;

Type: TreeNodeSchemaClass<TName, TKind, TreeNode, never, boolean, TInfo>