--[[
	ROBLOX TODO: add default generic param when possible
	original code:
	export type Expect<State extends MatcherState = MatcherState> = {
]]

export type Expect<State> = {
	-- ROBLOX deviation: no way to express __call metamethod typing
	-- <T = unknown>(actual: T) -> Matchers<void, T>;

	-- TODO: this is added by test runners, not `expect` itself
	addSnapshotSerializer: (any) -> (),
	assertions: (number) -> (),
	-- TODO: remove this `T extends` - should get from some interface merging
	extend: <T>(MatchersObject<T>) -> (),
	extractExpectedAssertionsErrors: () -> ExpectedAssertionsErrors,
	getState: () -> State,
	hasAssertions: () -> (),
	setState: (Partial<MatcherState>) -> (),
} & AsymmetricMatchers & {
	never: AsymmetricMatchersOmitAnyAndAnything,
}