Skip to content
Vitest 1
Main Navigation LeitfadenAPIKonfigurationFortgeschritten
1.6.1
0.34.6

Deutsch

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

Deutsch

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

Aussehen

Sidebar Navigation

Leitfaden

Warum Vitest

Erste Schritte

Features

Arbeitsbereich

Kommandozeilenschnittstelle

Testfilter

Reporter

Codeabdeckung (Coverage)

Snapshot

Mocking

Typen testen

Vitest UI

Browser-Modus

In-Source-Testing

Testkontext

Testumgebung

Erweiterung von Matchern

IDE-Integration

Debugging

Vergleiche mit anderen Test-Runnern

Migrationsleitfaden

Häufige Fehler

Leistungsverbesserung

API

Test API Referenz

Mock-Funktionen

Vi

expect

expectTypeOf

assert

assertType

Konfiguration

Verwaltung der Vitest-Konfigurationsdatei

Vitest konfigurieren

Auf dieser Seite

expectTypeOf ​

WARNING

Während der Laufzeit macht diese Funktion nichts. Um die Typprüfung zu aktivieren, vergessen Sie nicht, das --typecheck Flag zu übergeben.

  • Typ: <T>(a: unknown) => ExpectTypeOf

not ​

  • Typ: ExpectTypeOf

Mit der .not-Eigenschaft kannst du alle nachfolgenden Assertions negieren.

toEqualTypeOf ​

  • Typ: <T>(expected: T) => void

Dieser Matcher überprüft, ob die Typen exakt übereinstimmen. Der Matcher schlägt nicht fehl, wenn zwei Objekte unterschiedliche Werte, aber den gleichen Typ haben. Er schlägt jedoch fehl, wenn einem Objekt eine Eigenschaft fehlt oder eine zusätzliche Eigenschaft vorhanden ist.

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 ​

  • Typ: <T>(expected: T) => void

Dieser Matcher prüft, ob der Typ des zu prüfenden Wertes den erwarteten Typ erweitert (d.h. kompatibel ist). Er unterscheidet sich von toEqualTypeOf und ähnelt eher toMatchObject() von expect. Mit diesem Matcher kannst du prüfen, ob ein Objekt einem Typ "entspricht".

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 ​

  • Typ: ExpectTypeOf<ExtractedUnion>

Du kannst .extract verwenden, um einen bestimmten Typ aus einer Union für weitere Tests zu extrahieren.

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 }>() // extrahiert den Typ `{ xs?: any }` aus der Union
  .toEqualTypeOf<{
    xs?: CSSProperties;
    sm?: CSSProperties;
    md?: CSSProperties;
  }>();

expectTypeOf(getResponsiveProp(cssProperties))
  .extract<unknown[]>() // extrahiert den Array-Typ aus der Union
  .toEqualTypeOf<CSSProperties[]>();

WARNING

Wenn der angegebene Typ nicht in der Union gefunden wird, gibt .extract never zurück.

exclude ​

  • Typ: ExpectTypeOf<NonExcludedUnion>

Du kannst .exclude verwenden, um einen oder mehrere Typen aus einer Union für weitere Tests zu entfernen.

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 }>() // oder einfach .exclude<unknown[] | { xs?: unknown }>()
  .toEqualTypeOf<CSSProperties>();

WARNING

Wenn der angegebene Typ nicht in der Union gefunden wird, gibt .exclude never zurück.

returns ​

  • Typ: ExpectTypeOf<ReturnValue>

Du kannst .returns verwenden, um den Rückgabetyp eines Funktionstyps zu extrahieren.

ts
import { expectTypeOf } from 'vitest';

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

WARNING

Wenn .returns auf einen Nicht-Funktionstyp angewendet wird, gibt er never zurück, sodass du ihn nicht mit anderen Matchern verketten kannst.

parameters ​

  • Typ: ExpectTypeOf<Parameters>

Du kannst Funktionsargumente mit .parameters extrahieren, um Assertions auf ihre Typen durchzuführen. Die Parameter werden als Array zurückgegeben.

ts
import { expectTypeOf } from 'vitest';

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

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

WARNING

Wenn .parameters auf einen Nicht-Funktionstyp angewendet wird, gibt er never zurück, sodass du ihn nicht mit anderen Matchern verketten kannst.

TIP

Du kannst auch den Matcher .toBeCallableWith als eine aussagekräftigere Assertion verwenden.

parameter ​

  • Typ: (nth: number) => ExpectTypeOf

Du kannst ein bestimmtes Funktionsargument mit dem Aufruf .parameter(number) extrahieren, um andere Assertions auf seinen Typ durchzuführen. number ist der Index des Parameters (beginnend bei 0).

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

Wenn .parameter auf einen Nicht-Funktionstyp angewendet wird, gibt er never zurück, sodass du ihn nicht mit anderen Matchern verketten kannst.

constructorParameters ​

  • Typ: ExpectTypeOf<ConstructorParameters>

Du kannst Konstruktorparameter als Array von Typen extrahieren und mit dieser Methode Assertions durchführen.

ts
import { expectTypeOf } from 'vitest';

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

WARNING

Wenn .constructorParameters auf einen Nicht-Funktionstyp angewendet wird, gibt er never zurück, sodass du ihn nicht mit anderen Matchern verketten kannst.

TIP

Du kannst auch den Matcher .toBeConstructibleWith als eine aussagekräftigere Assertion verwenden.

instance ​

  • Typ: ExpectTypeOf<ConstructableInstance>

Diese Eigenschaft gibt Zugriff auf Matcher, die auf dem Typ einer Instanz der angegebenen Klasse ausgeführt werden können.

ts
import { expectTypeOf } from 'vitest';

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

WARNING

Wenn .instance auf einen Nicht-Funktionstyp angewendet wird, gibt er never zurück, sodass du ihn nicht mit anderen Matchern verketten kannst.

items ​

  • Typ: ExpectTypeOf<T>

Du kannst den Typ der Array-Elemente mit .items abrufen, um weitere Assertions durchzuführen.

ts
import { expectTypeOf } from 'vitest';

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

resolves ​

  • Typ: ExpectTypeOf<ResolvedPromise>

Dieser Matcher extrahiert den Typ des aufgelösten Wertes einer Promise, sodass du andere Assertions darauf durchführen kannst.

ts
import { expectTypeOf } from 'vitest';

async function asyncFunc() {
  return 123;
}

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

WARNING

Wenn .resolves auf einen Nicht-Promise-Typ angewendet wird, gibt er never zurück, sodass du ihn nicht mit anderen Matchern verketten kannst.

guards ​

  • Typ: ExpectTypeOf<Guard>

Dieser Matcher extrahiert den Typ des Guard (Type Guard Function), sodass du Assertions darauf durchführen kannst.

ts
import { expectTypeOf } from 'vitest';

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

WARNING

Gibt never zurück, wenn der Wert keine Type-Guard-Funktion ist, sodass du ihn nicht mit anderen Matchern verketten kannst.

asserts ​

  • Typ: ExpectTypeOf<Assert>

Dieser Matcher extrahiert den Typ der Assert-Funktion, sodass du Assertions darauf durchführen kannst.

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

Gibt never zurück, wenn der Wert keine Assert-Funktion ist, sodass du ihn nicht mit anderen Matchern verketten kannst.

toBeAny ​

  • Typ: () => void

Mit diesem Matcher kannst du prüfen, ob der angegebene Typ ein any-Typ ist. Wenn der Typ spezifischer als any ist, schlägt der Test fehl.

ts
import { expectTypeOf } from 'vitest';

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

toBeUnknown ​

  • Typ: () => void

Dieser Matcher überprüft, ob der Typ unknown ist.

ts
import { expectTypeOf } from 'vitest';

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

toBeNever ​

  • Typ: () => void

Dieser Matcher prüft, ob der Typ never ist.

ts
import { expectTypeOf } from 'vitest';

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

toBeFunction ​

  • Typ: () => void

Dieser Matcher prüft, ob der angegebene Typ eine function ist.

ts
import { expectTypeOf } from 'vitest';

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

toBeObject ​

  • Typ: () => void

Dieser Matcher prüft, ob der angegebene Typ ein object ist. Beachte, dass Arrays auch Objekte sind.

ts
import { expectTypeOf } from 'vitest';

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

toBeArray ​

  • Typ: () => void

Dieser Matcher prüft, ob der angegebene Typ Array<T> ist.

ts
import { expectTypeOf } from 'vitest';

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

toBeString ​

  • Typ: () => void

Dieser Matcher prüft, ob der angegebene Typ ein string ist.

ts
import { expectTypeOf } from 'vitest';

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

toBeBoolean ​

  • Typ: () => void

Dieser Matcher prüft, ob der angegebene Typ boolean ist.

ts
import { expectTypeOf } from 'vitest';

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

toBeVoid ​

  • Typ: () => void

Dieser Matcher prüft, ob der angegebene Typ void ist.

ts
import { expectTypeOf } from 'vitest';

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

toBeSymbol ​

  • Typ: () => void

Dieser Matcher prüft, ob der angegebene Typ ein symbol ist.

ts
import { expectTypeOf } from 'vitest';

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

toBeNull ​

  • Typ: () => void

Dieser Matcher prüft, ob der angegebene Typ null ist.

ts
import { expectTypeOf } from 'vitest';

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

toBeUndefined ​

  • Typ: () => void

Dieser Matcher prüft, ob der angegebene Typ undefined ist.

ts
import { expectTypeOf } from 'vitest';

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

toBeNullable ​

  • Typ: () => void

Dieser Matcher prüft, ob der angegebene Typ null oder undefined enthalten kann (d.h. ob null oder undefined dem Typ zugewiesen werden kann).

ts
import { expectTypeOf } from 'vitest';

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

toBeCallableWith ​

  • Typ: () => void

Dieser Matcher stellt sicher, dass die angegebene Funktion mit den angegebenen Parametern aufgerufen werden kann (d.h. die Parameter sind typkompatibel).

ts
import { expectTypeOf } from 'vitest';

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

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

WARNING

Wenn .toBeCallableWith auf einen Nicht-Funktionstyp angewendet wird, gibt er never zurück, sodass du ihn nicht mit anderen Matchern verketten kannst.

toBeConstructibleWith ​

  • Typ: () => void

Dieser Matcher stellt sicher, dass eine neue Instanz der angegebenen Klasse mit den angegebenen Konstruktorparametern erstellt werden kann (d.h. die Parameter sind typkompatibel).

ts
import { expectTypeOf } from 'vitest';

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

WARNING

Wenn .toBeConstructibleWith auf einen Nicht-Funktionstyp angewendet wird, gibt er never zurück, sodass du ihn nicht mit anderen Matchern verketten kannst.

toHaveProperty ​

  • Typ: <K extends keyof T>(property: K) => ExpectTypeOf<T[K]>

Dieser Matcher prüft, ob eine Eigenschaft mit dem angegebenen Namen im angegebenen Objekt vorhanden ist. Wenn sie vorhanden ist, gibt er auch den gleichen Satz von Matchern für den Typ dieser Eigenschaft zurück, sodass du die Assertions verketten kannst.

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
Vorherige Seiteexpect
Nächste Seiteassert

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors

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

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors