Skip to content

Commit 7b59e10

Browse files
committed
feat: replace any with unknown for default types
1 parent 2363d57 commit 7b59e10

3 files changed

Lines changed: 17 additions & 8 deletions

File tree

packages/spy/src/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ export interface MockContext<T extends Procedure> {
9292
lastCall: Parameters<T> | undefined
9393
}
9494

95-
// TODO: use `(...args: unknown[]) => unknown` for stricter default like jest?
9695
type Procedure = (...args: any[]) => any
96+
type UnknownProcedure = (...args: unknown[]) => unknown
9797

9898
type Methods<T> = keyof {
9999
[K in keyof T as T[K] extends Procedure ? K : never]: T[K];
@@ -117,7 +117,7 @@ Jest uses the latter for `MockInstance.mockImplementation` etc... and it allows
117117
const boolFn: Jest.Mock<() => boolean> = jest.fn<() => true>(() => true)
118118
*/
119119
/* eslint-disable ts/method-signature-style */
120-
export interface MockInstance<T extends Procedure = Procedure> {
120+
export interface MockInstance<T extends Procedure = UnknownProcedure> {
121121
/**
122122
* Use it to return the name given to mock with method `.mockName(name)`.
123123
*/
@@ -249,14 +249,14 @@ export interface MockInstance<T extends Procedure = Procedure> {
249249
}
250250
/* eslint-enable ts/method-signature-style */
251251

252-
export interface Mock<T extends Procedure = Procedure> extends MockInstance<T> {
252+
export interface Mock<T extends Procedure = UnknownProcedure> extends MockInstance<T> {
253253
new (...args: Parameters<T>): ReturnType<T>
254254
(...args: Parameters<T>): ReturnType<T>
255255
}
256256

257257
type PartialMaybePromise<T> = T extends Promise<Awaited<T>> ? Promise<Partial<Awaited<T>>> : Partial<T>
258258

259-
export interface PartialMock<T extends Procedure = Procedure> extends MockInstance<(...args: Parameters<T>) => PartialMaybePromise<ReturnType<T>>> {
259+
export interface PartialMock<T extends Procedure = UnknownProcedure> extends MockInstance<(...args: Parameters<T>) => PartialMaybePromise<ReturnType<T>>> {
260260
new (...args: Parameters<T>): ReturnType<T>
261261
(...args: Parameters<T>): ReturnType<T>
262262
}
@@ -514,7 +514,7 @@ function enhanceSpy<T extends Procedure>(
514514
return stub as any
515515
}
516516

517-
export function fn<T extends Procedure = Procedure>(
517+
export function fn<T extends Procedure = UnknownProcedure>(
518518
implementation?: T,
519519
): Mock<T> {
520520
const enhancedSpy = enhanceSpy(tinyspy.internalSpyOn({ spy: implementation || (() => {}) }, 'spy'))

test/core/test/spy.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ describe('spyOn', () => {
1515

1616
test('infers a class correctly', () => {
1717
vi.spyOn(mock, 'HelloWorld').mockImplementationOnce(() => {
18-
const Mock = vi.fn()
18+
const Mock = vi.fn<any>()
1919
Mock.prototype.hello = vi.fn(() => 'hello world')
2020
return new Mock()
2121
})

test/core/test/vi.spec.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@ describe('testing vi utils', () => {
4141
})
4242
expectType<MockedFunction<() => boolean>>(vi.fn(() => true))
4343
expectType<MockedFunction<() => boolean>>(vi.fn())
44+
45+
expectType<MockedFunction<() => boolean>>(vi.fn<() => boolean>(() => true))
46+
expectType<Mock<() => boolean>>(vi.fn<() => boolean>(() => true))
47+
expectType<() => boolean>(vi.fn(() => true))
48+
49+
// @ts-expect-error default unkonwn
50+
expectType<(v: number) => boolean>(vi.fn())
51+
52+
expectType<(v: number) => boolean>(vi.fn<any>())
4453
})
4554

4655
test('vi partial mocked', () => {
@@ -57,7 +66,7 @@ describe('testing vi utils', () => {
5766
})
5867

5968
vi.mocked(mockFactory, { partial: true, deep: false }).mockReturnValue({
60-
bar: vi.fn(),
69+
bar: vi.fn<FooBar['bar']>(),
6170
})
6271

6372
vi.mocked(mockFactory, { partial: true, deep: true }).mockReturnValue({
@@ -71,7 +80,7 @@ describe('testing vi utils', () => {
7180
})
7281

7382
vi.mocked(mockFactoryAsync, { partial: true, deep: false }).mockResolvedValue({
74-
bar: vi.fn(),
83+
bar: vi.fn<FooBar['bar']>(),
7584
})
7685

7786
vi.mocked(mockFactoryAsync, { partial: true, deep: true }).mockResolvedValue({

0 commit comments

Comments
 (0)