跳至內容

expectTypeOf

警告

在執行期間,此函式不會執行任何操作。若要 啟用類型檢查,請記得傳遞 --typecheck 旗標。

  • 類型: <T>(a: unknown) => ExpectTypeOf

not

  • 類型: ExpectTypeOf

你可以使用 .not 屬性來否定所有斷言。

toEqualTypeOf

  • 類型: <T>(expected: T) => void

此匹配器會檢查類型是否完全相等。如果兩個物件具有不同的值但相同的類型,此匹配器不會失敗。但是,如果物件缺少屬性,它會失敗。

ts
import {  } from 'vitest'

({ : 1 }).<{ : number }>()
({ : 1 }).({ : 1 })
({ : 1 }).({ : 2 })
({ : 1, : 1 })..<{ : number }>()

toMatchTypeOf

  • 類型: <T>(expected: T) => void

此匹配器會檢查預期的類型是否擴充了提供的類型。它與 toEqual 不同,更類似於 expecttoMatchObject()。使用此匹配器,你可以檢查物件是否「符合」某個類型。

ts
import {  } from 'vitest'

({ : 1, : 1 }).({ : 1 })
<number>().<string | number>()
<string | number>()..<number>()

萃取

  • 類型: ExpectTypeOf<ExtractedUnion>

您可以使用 .extract 來縮小類型範圍以進行進一步測試。

ts
import {  } from 'vitest'

type <> =  | [] | { ?: ; ?: ; ?:  }

interface CSSProperties { ?: string; ?: string }

function <>(: ): <> {
  return {}
}

const : CSSProperties = { : '1px', : '2px' }

(())
  .<{ ?: any }>() // extracts the last type from a union
  .<{ ?: CSSProperties; ?: CSSProperties; ?: CSSProperties }>()

(())
  .<unknown[]>() // extracts an array from a union
  .<CSSProperties[]>()

警告

如果在聯集中找不到類型,.extract 會傳回 never

排除

  • 類型: ExpectTypeOf<NonExcludedUnion>

您可以使用 .exclude 從聯集中移除類型以進行進一步測試。

ts
import {  } from 'vitest'

type <> =  | [] | { ?: ; ?: ; ?:  }

interface CSSProperties { ?: string; ?: string }

function <>(: ): <> {
  return {}
}

const : CSSProperties = { : '1px', : '2px' }

(())
  .<unknown[]>()
  .<{ ?: unknown }>() // or just .exclude<unknown[] | { xs?: unknown }>()
  .<CSSProperties>()

警告

如果在聯集中找不到類型,.exclude 會傳回 never

傳回

  • 類型: ExpectTypeOf<ReturnValue>

您可以使用 .returns 來萃取函式類型的傳回值。

ts
import {  } from 'vitest'

(() => {})..()
((: number) => [, ])..([1, 2])

警告

如果用於非函式類型,它會傳回 never,因此您無法將它與其他比對器串接。

參數

  • 類型: ExpectTypeOf<Parameters>

您可以使用 .parameters 萃取函式引數,以對其值進行斷言。參數會以陣列形式傳回。

ts
import {  } from 'vitest'

type  = () => void
type  = (: string) => void

<>()..<[]>()
<>()..<[string]>()

警告

如果用於非函式類型,它會傳回 never,因此您無法將它與其他比對器串接。

提示

您也可以使用 .toBeCallableWith 比對器作為更具表達力的斷言。

參數

  • 類型: (nth: number) => ExpectTypeOf

您可以使用 .parameter(number) 呼叫來萃取特定函式引數,並對其執行其他斷言。

ts
import {  } from 'vitest'

function (: number, : string) {
  return [, ]
}

().(0).()
().(1).()

警告

如果用於非函式類型,它會傳回 never,因此您無法將它與其他比對器串接。

建構函數參數

  • 類型: ExpectTypeOf<ConstructorParameters>

您可以使用此方法將建構函數參數萃取為值陣列,並對它們執行斷言。

ts
import {  } from 'vitest'

()..<[] | [string | number | Date]>()

警告

如果用於非函式類型,它會傳回 never,因此您無法將它與其他比對器串接。

提示

您也可以使用 .toBeConstructibleWith 比對器作為更具表達力的斷言。

實例

  • 類型: ExpectTypeOf<ConstructableInstance>

此屬性提供對可對所提供類別實例執行的比對器的存取權。

ts
import {  } from 'vitest'

()..('toISOString')

警告

如果用於非函式類型,它會傳回 never,因此您無法將它與其他比對器串接。

項目

  • 類型: ExpectTypeOf<T>

您可以使用 .items 取得陣列項目類型,以執行進一步的斷言。

ts
import {  } from 'vitest'

([1, 2, 3])..<number>()
([1, 2, 3])...<string>()

解決

  • 類型: ExpectTypeOf<ResolvedPromise>

此比對器會擷取 Promise 已解決的值,以便您可以對其執行其他斷言。

ts
import {  } from 'vitest'

async function () {
  return 123
}

()...()
(.('string'))..()

警告

如果用於非 Promise 類型,它會傳回 never,因此您無法將其與其他比對器串連。

防護

  • 類型: ExpectTypeOf<Guard>

此比對器會擷取防護值(例如,v is number),以便您可以對其執行斷言。

ts
import {  } from 'vitest'

function (: any):  is string {
  return typeof  === 'string'
}
()..()

警告

如果值不是防護函式,它會傳回 never,因此您無法將其與其他比對器串連。

斷言

  • 類型: ExpectTypeOf<Assert>

此比對器會擷取斷言值(例如,assert v is number),以便您可以對其執行斷言。

ts
import {  } from 'vitest'

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

()..()

警告

如果值不是斷言函式,它會傳回 never,因此您無法將其與其他比對器串連。

toBeAny

  • 類型: () => void

使用此比對器,您可以檢查提供的類型是否為 any 類型。如果類型太具體,測試將會失敗。

ts
import {  } from 'vitest'

<any>().()
({} as any).()
('string')..()

toBeUnknown

  • 類型: () => void

此比對器會檢查提供的類型是否為 unknown 類型。

ts
import {  } from 'vitest'

().()
({} as unknown).()
('string')..()

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 {  } from 'vitest'

(42)..()
({}).()

toBeArray

  • 類型: () => void

此比對器會檢查提供的類型是否為 Array<T>

ts
import {  } from 'vitest'

(42)..()
([]).()
([1, 2]).()
([{}, 42]).()

toBeString

  • 類型: () => void

此比對器會檢查提供的類型是否為 string

ts
import {  } from 'vitest'

(42)..()
('').()
('a').()

toBeBoolean

  • 類型: () => void

此比對器會檢查提供的類型是否為 boolean

ts
import {  } from 'vitest'

(42)..()
(true).()
<boolean>().()

toBeVoid

  • 類型: () => void

此比對器檢查提供的類型是否為 void

ts
import {  } from 'vitest'

(() => {})..()
<void>().()

toBeSymbol

  • 類型: () => void

此比對器檢查提供的類型是否為 symbol

ts
import {  } from 'vitest'

((1)).()
<symbol>().()

toBeNull

  • 類型: () => void

此比對器檢查提供的類型是否為 null

ts
import {  } from 'vitest'

(null).()
<null>().()
()..()

toBeUndefined

  • 類型: () => void

此比對器檢查提供的類型是否為 undefined

ts
import {  } from 'vitest'

().()
<undefined>().()
(null)..()

toBeNullable

  • 類型: () => void

此比對器檢查你是否可以使用 nullundefined 與提供的類型。

ts
import {  } from 'vitest'

<1 | undefined>().()
<1 | null>().()
<1 | undefined | null>().()

toBeCallableWith

  • 類型: () => void

此比對器確保你可以使用一組參數呼叫提供的函式。

ts
import {  } from 'vitest'

type  = () => void
type  = (: string) => void

<>().()
<>().('some string')

警告

如果用於非函式類型,它會傳回 never,因此您無法將它與其他比對器串接。

toBeConstructibleWith

  • 類型: () => void

此比對器確保你可以使用一組建構函式參數建立新的執行個體。

ts
import {  } from 'vitest'

().(new ())
().('01-01-2000')

警告

如果用於非函式類型,它會傳回 never,因此您無法將它與其他比對器串接。

toHaveProperty

  • 類型: <K extends keyof T>(property: K) => ExpectTypeOf<T[K>

此比對器檢查提供的物件上是否存在屬性。如果存在,它也會為此屬性的類型傳回相同的比對器組,因此你可以一個接一個地串接斷言。

ts
import {  } from 'vitest'

const  = { : 1, : '' }

().('a')
()..('c')

().('a').()
().('b').()
().('a')..()