Skip to main content

Theme<>

type Theme<T extends VarGroup<unknown, symbol>>

A Theme is a type that represents a style that themes a set of variables in a given VarGroup. It's the result of calling stylex.createTheme.

import type {VarGroup} from '@stylexjs/stylex';
import * as stylex from '@stylexjs/stylex';

import {vars} from './vars.stylex';

export const theme: Theme<typeof vars> = stylex.createTheme(vars, {
color: 'red', // OK
backgroundColor: 'blue', // OK
});

The most common use-case for Theme is to accept a theme for a particular set of variables.

While, it's not needed in most cases, Theme also accepts an optional second type type argument.

Advanced use-case: unique type identity for a `Theme`

Two themes for the same VarGroup have the same type by default. In most cases, this is the desired behavior. However, in some cases, you may want each theme to have a unique type identity to constrain the themes that can be passed into a particular component.

import * as stylex from '@stylexjs/stylex';
import type {Theme} from '@stylexjs/stylex';
import {vars} from './vars.stylex';

declare const Tag: unique symbol;
export const theme1: Theme<typeof vars, Tag> = stylex.createTheme(vars, {
color: 'red', // OK
backgroundColor: 'blue', // OK
});

Now, theme1 has a unique type identity and a different Theme for vars would not satisfy typeof theme1.

This advanced use-case should be rarely needed, but it's available when it is.