Skip to main content

types

package @remirror/types

interface Coords

Defines coordinates returned by the [[EditorView.coordsAtPos]] function.

Signature:

export interface Coords 

property bottom

Vertical distance from the top of the page viewport to the bottom side of the described position (px).

Signature:

bottom: number;

property left

Horizontal distance from the left of the page viewport to the left side of the described position (px).

Signature:

left: number;

property right

Horizontal distance from the left of the page viewport to the right side of the described position (px).

Signature:

right: number;

property top

Vertical distance from the top of the page viewport to the top side of the described position (px).

Signature:

top: number;

interface Flavoring

Used by Flavor to mark a type in a readable way.

Signature:

export interface Flavoring<Name> 

property [_flavor]

Signature:

readonly [_flavor]?: Name;

interface ObjectMark

A JSON representation of a prosemirror Mark.

Signature:

export interface ObjectMark 

property attrs

Signature:

attrs?: Record<string, Literal>;

property type

Signature:

type: string;

interface Shape

An object with string keys and values of type any

Signature:

export interface Shape 

Signature:

[key: string]: any;

type And

A shorthand for creating and intersection of two object types.

Signature:

export type And<Type extends Shape, Other extends Shape> = Type & Other;

References: Shape

type AnyConstructor

Matches any constructor type.

Signature:

export type AnyConstructor<Type = any> = new (...args: any[]) => Type;

type AnyFunction

Concisely and cleanly define an arbitrary function.

Signature:

export type AnyFunction<Type = any> = (...args: any[]) => Type;

Remarks:

Taken from simplytyped Useful when designing many api's that don't care what function they take in, they just need to know what it returns.

type Array1

An array which must include the first item.

Signature:

export type Array1<Type> = MinArray<Type, 1>;

References: MinArray

type Array2

An array which must include the first 2 items.

Signature:

export type Array2<Type> = MinArray<Type, 2>;

References: MinArray

type Array3

An array which must include the first 3 items.

Signature:

export type Array3<Type> = MinArray<Type, 3>;

References: MinArray

type Brand

Create a "branded" version of a type. TypeScript won't allow implicit conversion to this type

Signature:

export type Brand<Type, B> = Type & Branding<B>;

type ConditionalReturnKeys

Conditionally pick keys which are functions and have the requested return type.

Signature:

export type ConditionalReturnKeys<Base, Return> = NonNullable<{
[Key in keyof Base]: Base[Key] extends AnyFunction<infer R> ? R extends Return ? Key : never : never;
}[keyof Base]>;

References: AnyFunction

type ConditionalReturnPick

Pick the properties from an object that are methods with the requested Return type.

Signature:

export type ConditionalReturnPick<Base, Return> = Pick<Base, ConditionalReturnKeys<Base, Return>>;

References: ConditionalReturnKeys

type DeepPartial

A recursive partial type. Useful for object that will be merged with defaults.

Signature:

export type DeepPartial<Type> = Type extends object ? {
[K in keyof Type]?: DeepPartial<Type[K]>;
} : Type;

References: DeepPartial

type DeepString

Converts every nested type to a string.

Signature:

export type DeepString<Type> = Type extends object ? {
[K in keyof Type]: DeepString<Type[K]>;
} : string;

References: DeepString

type Diff

Get the diff between two types. All identical keys are stripped away.

Signature:

export type Diff<A, B> = Omit<A, keyof B> & Omit<B, keyof A>;

Remarks:

type Fun = Diff<{notFun: false, fun: true}, {notFun: true, wow: string}>;
// => { fun: true, wow: string }

type EmptyShape

An alternative to usage of {} as a type.

Signature:

export type EmptyShape = Record<never, never>;

type Flavor

Create a "flavored" version of a type. TypeScript will disallow mixing flavors, but will allow unflavored values of that type to be passed in where a flavored version is expected. This is a less restrictive form of branding.

Signature:

export type Flavor<Type, Name> = Type & Flavoring<Name>;

References: Flavoring

type FlipPartialAndRequired

Reverses the partial and required keys for the type provided. If it was a required property it becomes a partial property and if it was a partial property it becomes a required property.

Signature:

export type FlipPartialAndRequired<Type extends Shape> = PickPartial<Type> & Partial<PickRequired<Type>>;

References: Shape, PickPartial, PickRequired

type GetRequiredKeys

Get all the keys for required properties on this type.

Signature:

export type GetRequiredKeys<Type extends Shape> = keyof ConditionalPick<KeepPartialProperties<Type>, NeverBrand>;

References: Shape, KeepPartialProperties

type IfEmpty

Conditional type which checks if the provided Type is and empty object (no properties). If it is uses the Then type if not falls back to the Else type.

Signature:

export type IfEmpty<Type extends object, Then, Else> = keyof Type extends never ? Then : Else;

type IfHasRequiredProperties

Checks the type provided and if it has any properties which are required it will return the Then type. When none of the properties are required it will return the Else type.

Signature:

export type IfHasRequiredProperties<Type extends object, Then, Else> = IfNoRequiredProperties<Type, Else, Then>;

References: IfNoRequiredProperties

Remarks:

This is a reverse of the IfNoRequiredProperties type.

type IfMatches

Condition that checks if the keys of the two objects match. If so, respond with Then otherwise Else.

Signature:

export type IfMatches<A, B, Then, Else> = IfEmpty<Diff<A, B>, Then, Else>;

References: IfEmpty, Diff

type IfNoRequiredProperties

A conditional check on the type. When there are no required keys it outputs the Then type, otherwise it outputs the Else type.

Signature:

export type IfNoRequiredProperties<Type extends object, Then, Else> = GetRequiredKeys<Type> extends NeverBrand ? Then : Else;

References: GetRequiredKeys

Remarks:

This is useful for dynamically setting the parameter list of a method call depending on whether keys are required.

type IndexUnionFromTuple

Extract the valid index union from a provided tuple.

import { IndexUnionFromTuple } from '@remirror/core-types';

const tuple = ['a', 'b', 'c'];
type Index = IndexUnionFromTuple<typeof tuple> => 0 | 1 | 2

Signature:

export type IndexUnionFromTuple<Tuple extends readonly unknown[]> = Tuple extends Tuple ? number extends Tuple['length'] ? number : _IndexUnionFromTuple<[], Tuple['length']> : never;

type JsonPrimitive

Matches any valid JSON primitive value.

Signature:

export type JsonPrimitive = string | number | boolean | null;

type KeepPartialProperties

Keeps the partial properties of a type unchanged. Transforms the rest to never.

Signature:

export type KeepPartialProperties<Type extends Shape> = {
[Key in keyof Type]: Type[Key] extends undefined ? Type[Key] : NeverBrand;
};

References: Shape

type Listable

Allow a type of a list of types.

Signature:

export type Listable<Type> = Type | Type[];

type Literal

All the literal types

Signature:

export type Literal = string | number | boolean | undefined | null | void | object;

type MakeNullable

Makes specified keys of an interface nullable while the rest stay the same.

Signature:

export type MakeNullable<Type extends object, Keys extends keyof Type> = Omit<Type, Keys> & {
[Key in Keys]: Type[Key] | null;
};

type MakeOptional

Makes specified keys of an interface optional while the rest stay the same.

Signature:

export type MakeOptional<Type extends object, Keys extends keyof Type> = Omit<Type, Keys> & {
[Key in Keys]+?: Type[Key];
};

type MakeReadonly

Makes specified keys of an interface readonly.

Signature:

export type MakeReadonly<Type extends object, Keys extends keyof Type> = Omit<Type, Keys> & {
+readonly [Key in Keys]: NonNullable<Type[Key]>;
};

type MakeRequired

Makes specified keys of an interface Required while the rest remain unchanged.

Signature:

export type MakeRequired<Type extends object, Keys extends keyof Type> = Omit<Type, Keys> & {
[Key in Keys]-?: Type[Key];
};

type MakeUndefined

Makes specified keys of an interface optional while the rest stay the same.

Signature:

export type MakeUndefined<Type extends object, Keys extends keyof Type> = Omit<Type, Keys> & {
[Key in Keys]: Type[Key] | undefined;
};

type MinArray

Create a type for an array (as a tuple) which has at least the provided Length.

This can be useful when noUncheckedIndexedAccess is set to true in the compiler options. Annotate types when you are sure the provided index will always be available.

import { MinArray } from '@remirror/core-types';

MinArray<string, 2>; // => [string, string, ...string[]];

Signature:

export type MinArray<Type, Length extends number> = Length extends Length ? number extends Length ? Type[] : _MinArray<Type, Length, []> : never;

type NonNullableShape

Signature:

export type NonNullableShape<Type extends object> = {
[Key in keyof Type]: NonNullable<Type[Key]>;
};

type Nullable

Makes a type nullable or undefined.

Signature:

export type Nullable<Type> = Type | null | undefined;

type PartialWithRequiredKeys

Make the whole interface partial except for some specified keys which will be made required.

Signature:

export type PartialWithRequiredKeys<Type extends object, Keys extends keyof Type> = Partial<Pick<Type, Exclude<keyof Type, Keys>>> & Required<Pick<Type, Keys>>;

type PickPartial

Pick the partial properties from the provided Type and make them all required.

Signature:

export type PickPartial<Type extends Shape> = {
[Key in keyof ConditionalExcept<KeepPartialProperties<Type>, NeverBrand>]-?: Type[Key];
};

References: Shape, KeepPartialProperties

type PickRequired

Only pick the required (non-partial) types from the given Type.

Signature:

export type PickRequired<Type extends Shape> = {
[Key in keyof ConditionalPick<KeepPartialProperties<Type>, NeverBrand>]: Type[Key];
};

References: Shape, KeepPartialProperties

type Predicate

Creates a predicate type.

Signature:

export type Predicate<Type> = (value: unknown) => value is Type;

type ProsemirrorAttributes

Used for attributes which can be added to prosemirror nodes and marks.

Signature:

export type ProsemirrorAttributes<Extra extends object = object> = Record<string, unknown> & Remirror.Attributes & Extra & {
class?: string;
};

type RemoveFlavoring

Remove the flavoring from a type.

Signature:

export type RemoveFlavoring<Type, Name> = Type extends Flavor<infer T, Name> ? T : Type;

References: Flavor

type Replace

Replace and extend any object keys.

Signature:

export type Replace<Type, Replacements extends Shape> = Omit<Type, keyof Replacements> & Replacements;

References: Shape

type Simplify

When a type is really deep and has retained an unnecessary amount of type information, this flattens it to a single array/object/value.

TODO not using it right now as it's breaking with globally available types via namespace.

Signature:

export type Simplify<T> = T extends object | any[] ? {
[K in keyof T]: T[K];
} : T;

type StrictReplace

Replace only the current keys with different types.

Signature:

export type StrictReplace<Type, Replacements extends Record<keyof Type, unknown>> = Omit<Type, keyof Replacements> & Replacements;

type StringKey

An alternative to keyof that only extracts the string keys.

Signature:

export type StringKey<Type> = Extract<keyof Type, string>;

type TupleOf

Create a tuple of Size from the provided Type.

Signature:

export type TupleOf<Type, Size extends number> = Size extends Size ? number extends Size ? Type[] : _TupleOf<Type, Size, []> : never;

type TupleUnion

Returns tuple types that include every string in union TupleUnion<keyof {bar: string; leet: number }>; ["bar", "leet"] | ["leet", "bar"];

Taken from ❤️ https://github.com/microsoft/TypeScript/issues/13298\#issuecomment-692864087

Problem it is recursive and has quickly eats into the maximum depth.

Signature:

export type TupleUnion<T> = ((T extends any ? (t: T) => T : never) extends infer U ? (U extends any ? (u: U) => any : never) extends (v: infer V) => any ? V : never : never) extends (_: any) => infer W ? [...TupleUnion<Exclude<T, W>>, W] : [];

References: TupleUnion

type TupleValue

Extract the values of a tuple as a union type.

Signature:

export type TupleValue<Tuple extends readonly unknown[]> = Tuple[number];

Remarks:

const myTuple = ['a', 'b', 'c'] as const;

type MyTuple = TupleValue<typeof myTuple>; // 'a' | 'b' | 'c'

type UndefinedFlipPartialAndRequired

Reverses the partial and required keys for the type provided. If it was a required property it becomes a partial property and if it was a partial property it becomes a required property.

Signature:

export type UndefinedFlipPartialAndRequired<Type extends Shape> = UndefinedPickPartial<Type> & Partial<PickRequired<Type>>;

References: Shape, UndefinedPickPartial, PickRequired

type UndefinedPickPartial

Like pick partial but all types can still specify undefined.

Signature:

export type UndefinedPickPartial<Type extends Shape> = {
[Key in keyof PickPartial<Type>]: PickPartial<Type>[Key] | undefined;
};

References: Shape, PickPartial

type UnknownShape

An object with string keys and values of type unknown

Signature:

export type UnknownShape<Type = unknown> = Record<string, Type>;

type UseDefault

When the type is never use a default type instead.

TODO why doesn't this work

Signature:

export type UseDefault<Type, Default> = Type extends never ? Default : Type;

type Value

Extract the values of an object as a union type.

Signature:

export type Value<Type> = Type[keyof Type];

Remarks:

const myRecord = { A: 'a', B: 'b', C: 'c' } as const;

type MyRecord = Value<typeof myRecord>; // 'a' | 'b' | 'c'

type Writeable

Remove all readonly modifiers from the provided type.

Signature:

export type Writeable<Type> = {
-readonly [Key in keyof Type]: Type[Key];
};