Skip to content
Vitest 3
Main Navigation Руководство & APIКонфигурацияРежим браузераРасширенный API
3.2.0
2.1.9
1.6.1
0.34.6

Русский

English
简体中文
繁體中文
Español
Français
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Русский

English
简体中文
繁體中文
Español
Français
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Внешний вид

Sidebar Navigation

Введение

Почему Vitest

Начало работы

Возможности

Настройка Vitest

API

Справочник по API тестирования

Мок-функции

Vi

expect

expectTypeOf

assert

assertType

Руководство

Интерфейс командной строки

Фильтрация тестов

Тестовые проекты

Средства отчётности

Покрытие кода

Снапшот-тестирование

Мокирование

Параллелизм

Тестирование типов

Vitest UI

Тестирование в исходном коде

Контекст теста

Аннотации тестов

Среда тестирования

Расширение матчеров

Интеграции с IDE

Отладка

Распространенные ошибки

Руководство по миграции

Миграция на Vitest 3.0

Миграция с Jest

Производительность

Профилирование производительности тестов

Улучшение производительности

Режим браузера

Расширенный API

Сравнение с другими тестовыми раннерами

Содержание страницы

expectTypeOf ​

WARNING

Во время выполнения эта функция не выполняет никаких действий. Чтобы включить проверку типов, не забудьте использовать флаг --typecheck.

  • Тип: <T>(a: unknown) => ExpectTypeOf

not ​

  • Тип: ExpectTypeOf

Вы можете инвертировать все утверждения, используя свойство .not.

toEqualTypeOf ​

  • Тип: <T>(expected: T) => void

Этот сопоставитель проверяет полное равенство типов. Он не выдаст ошибку, если два объекта имеют разные значения, но одинаковый тип. Однако он выдаст ошибку, если у объекта отсутствует свойство.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf({ a: 1 }).toEqualTypeOf<{ a: number }>();
expectTypeOf({ a: 1 }).toEqualTypeOf({ a: 1 });
expectTypeOf({ a: 1 }).toEqualTypeOf({ a: 2 });
expectTypeOf({ a: 1, b: 1 }).not.toEqualTypeOf<{ a: number }>();

toMatchTypeOf ​

  • Тип: <T>(expected: T) => void

Этот сопоставитель проверяет, расширяет ли проверяемый тип предоставленный тип. Он отличается от toEqual и более похож на toMatchObject() из expect. Этот сопоставитель позволяет проверить соответствие объекта типу.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf({ a: 1, b: 1 }).toMatchTypeOf({ a: 1 });
expectTypeOf<number>().toMatchTypeOf<string | number>();
expectTypeOf<string | number>().not.toMatchTypeOf<number>();

extract ​

  • Тип: ExpectTypeOf<ExtractedUnion>

Вы можете использовать .extract, чтобы уточнить типы для дальнейшего тестирования.

ts
import { expectTypeOf } from 'vitest';

type ResponsiveProp<T> = T | T[] | { xs?: T; sm?: T; md?: T };

interface CSSProperties {
  margin?: string;
  padding?: string;
}

function getResponsiveProp<T>(_props: T): ResponsiveProp<T> {
  return {};
}

const cssProperties: CSSProperties = { margin: '1px', padding: '2px' };

expectTypeOf(getResponsiveProp(cssProperties))
  .extract<{ xs?: any }>() // извлекает соответствующий тип из объединения
  .toEqualTypeOf<{
    xs?: CSSProperties;
    sm?: CSSProperties;
    md?: CSSProperties;
  }>();

expectTypeOf(getResponsiveProp(cssProperties))
  .extract<unknown[]>() // извлекает массив из объединения
  .toEqualTypeOf<CSSProperties[]>();

WARNING

Если в объединении не найден тип, .extract вернет never.

exclude ​

  • Тип: ExpectTypeOf<NonExcludedUnion>

Вы можете использовать .exclude, чтобы удалить типы из объединения для дальнейшего тестирования.

ts
import { expectTypeOf } from 'vitest';

type ResponsiveProp<T> = T | T[] | { xs?: T; sm?: T; md?: T };

interface CSSProperties {
  margin?: string;
  padding?: string;
}

function getResponsiveProp<T>(_props: T): ResponsiveProp<T> {
  return {};
}

const cssProperties: CSSProperties = { margin: '1px', padding: '2px' };

expectTypeOf(getResponsiveProp(cssProperties))
  .exclude<unknown[]>()
  .exclude<{ xs?: unknown }>() // или просто .exclude<unknown[] | { xs?: unknown }>()
  .toEqualTypeOf<CSSProperties>();

WARNING

Если в объединении не найден тип, .exclude вернет never.

returns ​

  • Тип: ExpectTypeOf<ReturnValue>

Вы можете использовать .returns, чтобы извлечь возвращаемое значение функции.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(() => {}).returns.toBeVoid();
expectTypeOf((a: number) => [a, a]).returns.toEqualTypeOf([1, 2]);

WARNING

При применении к нефункциональному типу, он вернет never, поэтому вы не сможете объединить его в цепочку с другими сопоставителями.

parameters ​

  • Тип: ExpectTypeOf<Parameters>

Метод .parameters извлекает аргументы функции, чтобы выполнять утверждения относительно их значений. Параметры возвращаются в виде массива.

ts
import { expectTypeOf } from 'vitest';

type NoParam = () => void;
type HasParam = (s: string) => void;

expectTypeOf<NoParam>().parameters.toEqualTypeOf<[]>();
expectTypeOf<HasParam>().parameters.toEqualTypeOf<[string]>();

WARNING

При применении к нефункциональному типу, он вернет never, поэтому вы не сможете объединить его в цепочку с другими сопоставителями.

TIP

Вы также можете использовать сопоставитель .toBeCallableWith в качестве более выразительного утверждения.

parameter ​

  • Тип: (nth: number) => ExpectTypeOf

Вы можете извлечь конкретный аргумент функции, вызвав .parameter(number), чтобы выполнять другие утверждения относительно него.

ts
import { expectTypeOf } from 'vitest';

function foo(a: number, b: string) {
  return [a, b];
}

expectTypeOf(foo).parameter(0).toBeNumber();
expectTypeOf(foo).parameter(1).toBeString();

WARNING

При применении к нефункциональному типу, он вернет never, поэтому вы не сможете объединить его в цепочку с другими сопоставителями.

constructorParameters ​

  • Тип: ExpectTypeOf<ConstructorParameters>

Вы можете извлечь параметры конструктора в виде массива значений и выполнять утверждения относительно них с помощью этого метода.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(Date).constructorParameters.toEqualTypeOf<
  [] | [string | number | Date]
>();

WARNING

При применении к нефункциональному типу, он вернет never, поэтому вы не сможете объединить его в цепочку с другими сопоставителями.

TIP

Вы также можете использовать сопоставитель .toBeConstructibleWith в качестве более выразительного утверждения.

instance ​

  • Тип: ExpectTypeOf<ConstructableInstance>

Это свойство дает доступ к сопоставителям, которые можно применять к экземпляру данного класса.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(Date).instance.toHaveProperty('toISOString');

WARNING

При применении к нефункциональному типу, он вернет never, поэтому вы не сможете объединить его в цепочку с другими сопоставителями.

items ​

  • Тип: ExpectTypeOf<T>

Вы можете получить тип элемента массива с помощью .items, чтобы выполнять дальнейшие утверждения.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf([1, 2, 3]).items.toEqualTypeOf<number>();
expectTypeOf([1, 2, 3]).items.not.toEqualTypeOf<string>();

resolves ​

  • Тип: ExpectTypeOf<ResolvedPromise>

Этот сопоставитель извлекает разрешенное значение Promise, чтобы вы могли выполнять другие утверждения относительно него.

ts
import { expectTypeOf } from 'vitest';

async function asyncFunc() {
  return 123;
}

expectTypeOf(asyncFunc).returns.resolves.toBeNumber();
expectTypeOf(Promise.resolve('string')).resolves.toBeString();

WARNING

При применении к типу, не являющемуся промисом, он вернет never, поэтому вы не сможете объединить его в цепочку с другими сопоставителями.

guards ​

  • Тип: ExpectTypeOf<Guard>

Этот сопоставитель извлекает значение guard (например, v is number), чтобы вы могли выполнять утверждения относительно него.

ts
import { expectTypeOf } from 'vitest';

function isString(v: any): v is string {
  return typeof v === 'string';
}
expectTypeOf(isString).guards.toBeString();

WARNING

Возвращает never, если значение не является функцией guard, поэтому вы не сможете объединить его в цепочку с другими сопоставителями.

asserts ​

  • Тип: ExpectTypeOf<Assert>

Этот сопоставитель извлекает значение assert (например, assert v is number), чтобы вы могли выполнять утверждения относительно него.

ts
import { expectTypeOf } from 'vitest';

function assertNumber(v: any): asserts v is number {
  if (typeof v !== 'number') {
    throw new TypeError('Nope !');
  }
}

expectTypeOf(assertNumber).asserts.toBeNumber();

WARNING

Возвращает never, если значение не является функцией assert, поэтому вы не сможете объединить его в цепочку с другими сопоставителями.

toBeAny ​

  • Тип: () => void

С помощью этого сопоставителя вы можете проверить, является ли указанный тип типом any. Если тип слишком специфичен, тест провалится.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf<any>().toBeAny();
expectTypeOf({} as any).toBeAny();
expectTypeOf('string').not.toBeAny();

toBeUnknown ​

  • Тип: () => void

Этот сопоставитель проверяет, является ли указанный тип типом unknown.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf().toBeUnknown();
expectTypeOf({} as unknown).toBeUnknown();
expectTypeOf('string').not.toBeUnknown();

toBeNever ​

  • Тип: () => void

Этот сопоставитель проверяет, является ли указанный тип типом never.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf<never>().toBeNever();
expectTypeOf((): never => {}).returns.toBeNever();

toBeFunction ​

  • Тип: () => void

Этот сопоставитель проверяет, является ли указанный тип function.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(42).not.toBeFunction();
expectTypeOf((): never => {}).toBeFunction();

toBeObject ​

  • Тип: () => void

Этот сопоставитель проверяет, является ли указанный тип object.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(42).not.toBeObject();
expectTypeOf({}).toBeObject();

toBeArray ​

  • Тип: () => void

Этот сопоставитель проверяет, является ли указанный тип Array<T>.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(42).not.toBeArray();
expectTypeOf([]).toBeArray();
expectTypeOf([1, 2]).toBeArray();
expectTypeOf([{}, 42]).toBeArray();

toBeString ​

  • Тип: () => void

Этот сопоставитель проверяет, является ли указанный тип string.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(42).not.toBeString();
expectTypeOf('').toBeString();
expectTypeOf('a').toBeString();

toBeBoolean ​

  • Тип: () => void

Этот сопоставитель проверяет, является ли указанный тип boolean.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(42).not.toBeBoolean();
expectTypeOf(true).toBeBoolean();
expectTypeOf<boolean>().toBeBoolean();

toBeVoid ​

  • Тип: () => void

Этот сопоставитель проверяет, является ли указанный тип void.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(() => {}).returns.toBeVoid();
expectTypeOf<void>().toBeVoid();

toBeSymbol ​

  • Тип: () => void

Этот сопоставитель проверяет, является ли указанный тип symbol.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(Symbol(1)).toBeSymbol();
expectTypeOf<symbol>().toBeSymbol();

toBeNull ​

  • Тип: () => void

Этот сопоставитель проверяет, является ли указанный тип null.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(null).toBeNull();
expectTypeOf<null>().toBeNull();
expectTypeOf(undefined).not.toBeNull();

toBeUndefined ​

  • Тип: () => void

Этот сопоставитель проверяет, является ли указанный тип undefined.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(undefined).toBeUndefined();
expectTypeOf<undefined>().toBeUndefined();
expectTypeOf(null).not.toBeUndefined();

toBeNullable ​

  • Тип: () => void

Этот сопоставитель проверяет, можно ли использовать null или undefined с указанным типом.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf<undefined | 1>().toBeNullable();
expectTypeOf<null | 1>().toBeNullable();
expectTypeOf<undefined | null | 1>().toBeNullable();

toBeCallableWith ​

  • Тип: () => void

Этот сопоставитель гарантирует, что вы можете вызвать указанную функцию с набором параметров.

ts
import { expectTypeOf } from 'vitest';

type NoParam = () => void;
type HasParam = (s: string) => void;

expectTypeOf<NoParam>().toBeCallableWith();
expectTypeOf<HasParam>().toBeCallableWith('some string');

WARNING

При применении к нефункциональному типу, он вернет never, поэтому вы не сможете объединить его в цепочку с другими сопоставителями.

toBeConstructibleWith ​

  • Тип: () => void

Этот сопоставитель гарантирует, что вы можете создать новый экземпляр, используя набор параметров конструктора.

ts
import { expectTypeOf } from 'vitest';

expectTypeOf(Date).toBeConstructibleWith(new Date());
expectTypeOf(Date).toBeConstructibleWith('01-01-2000');

WARNING

При применении к нефункциональному типу, он вернет never, поэтому вы не сможете объединить его в цепочку с другими сопоставителями.

toHaveProperty ​

  • Тип: <K extends keyof T>(property: K) => ExpectTypeOf<T[K]>

Этот сопоставитель проверяет, существует ли свойство в указанном объекте. Если оно существует, он также возвращает тот же набор сопоставителей для типа этого свойства, позволяя цепочку утверждений.

ts
import { expectTypeOf } from 'vitest';

const obj = { a: 1, b: '' };

expectTypeOf(obj).toHaveProperty('a');
expectTypeOf(obj).not.toHaveProperty('c');

expectTypeOf(obj).toHaveProperty('a').toBeNumber();
expectTypeOf(obj).toHaveProperty('b').toBeString();
expectTypeOf(obj).toHaveProperty('a').not.toBeString();
Pager
Предыдущая страницаexpect
Следующая страницаassert

Выпущено на условиях лицензии MIT.

Авторские права (c) 2021-Present Vitest Team

https://vitest.dev/api/expect-typeof

Выпущено на условиях лицензии MIT.

Авторские права (c) 2021-Present Vitest Team