expectTypeOf
- 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.
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".
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
import { expectTypeOf } from 'vitest';
expectTypeOf(42).not.toBeObject();
expectTypeOf({}).toBeObject();toBeArray
- Typ:
() => void
Dieser Matcher prüft, ob der angegebene Typ Array<T> ist.
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.
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.
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.
import { expectTypeOf } from 'vitest';
expectTypeOf(() => {}).returns.toBeVoid();
expectTypeOf<void>().toBeVoid();toBeSymbol
- Typ:
() => void
Dieser Matcher prüft, ob der angegebene Typ ein symbol ist.
import { expectTypeOf } from 'vitest';
expectTypeOf(Symbol(1)).toBeSymbol();
expectTypeOf<symbol>().toBeSymbol();toBeNull
- Typ:
() => void
Dieser Matcher prüft, ob der angegebene Typ null ist.
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.
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).
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).
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).
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.
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();