WithType Interface

Packages > @fluidframework/tree > WithType

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, unknown, 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, unknown, never, boolean, TInfo>;

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