Skip to content

Commit bb0dfc2

Browse files
committed
Migrate some assertions in createSelector.test-d.ts to Vitest
1 parent ff7f1bc commit bb0dfc2

File tree

1 file changed

+70
-63
lines changed

1 file changed

+70
-63
lines changed

type-tests/createSelector.test-d.ts

Lines changed: 70 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -243,8 +243,10 @@ describe('type tests', () => {
243243
selector({ foo: 'fizz' }, { bar: 'baz' })
244244

245245
const ret = selector({ foo: 'fizz' }, { bar: 42 })
246-
const foo: string = ret.foo
247-
const bar: number = ret.bar
246+
247+
expectTypeOf(ret).toHaveProperty('foo').toBeString()
248+
249+
expectTypeOf(ret).toHaveProperty('bar').toBeNumber()
248250

249251
const selector2 = createSelector(
250252
(state: State) => state.foo,
@@ -263,7 +265,7 @@ describe('type tests', () => {
263265
})
264266
)
265267

266-
selector2({ foo: 'fizz' }, { bar: 42 })
268+
expectTypeOf(selector2).toBeCallableWith({ foo: 'fizz' }, { bar: 42 })
267269

268270
const selector3 = createSelector(
269271
(s: State) => s.foo,
@@ -274,8 +276,7 @@ describe('type tests', () => {
274276
}
275277
)
276278

277-
// @ts-expect-error
278-
selector3({ foo: 'fizz' }, 42)
279+
expectTypeOf(selector3).parameter(1).toBeNever()
279280

280281
const selector4 = createSelector(
281282
(s: State, val: number) => s.foo,
@@ -285,7 +286,7 @@ describe('type tests', () => {
285286
}
286287
)
287288

288-
selector4({ foo: 'fizz' }, 42)
289+
expectTypeOf(selector4).toBeCallableWith({ foo: 'fizz' }, 42)
289290
})
290291

291292
test('array argument', () => {
@@ -299,9 +300,12 @@ describe('type tests', () => {
299300
)
300301

301302
const ret = selector({ foo: 'fizz' }, { bar: 42 })
302-
const foo1: string = ret.foo1
303-
const foo2: string = ret.foo2
304-
const bar: number = ret.bar
303+
304+
expectTypeOf(ret).toHaveProperty('foo1').toBeString()
305+
306+
expectTypeOf(ret).toHaveProperty('foo2').toBeString()
307+
308+
expectTypeOf(ret).toHaveProperty('bar').toBeNumber()
305309

306310
// @ts-expect-error
307311
createSelector([(state: { foo: string }) => state.foo])
@@ -424,21 +428,29 @@ describe('type tests', () => {
424428

425429
{
426430
const ret = selector2({ foo: 'fizz' })
427-
const foo1: string = ret.foo1
428-
const foo2: string = ret.foo2
429-
const foo3: string = ret.foo3
430-
const foo4: string = ret.foo4
431-
const foo5: string = ret.foo5
432-
const foo6: string = ret.foo6
433-
const foo7: string = ret.foo7
434-
const foo8: string = ret.foo8
435-
const foo9: string = ret.foo9
436-
// @ts-expect-error
437-
ret.foo10
431+
432+
expectTypeOf(ret).toHaveProperty('foo1').toBeString()
433+
434+
expectTypeOf(ret).toHaveProperty('foo2').toBeString()
435+
436+
expectTypeOf(ret).toHaveProperty('foo3').toBeString()
437+
438+
expectTypeOf(ret).toHaveProperty('foo4').toBeString()
439+
440+
expectTypeOf(ret).toHaveProperty('foo5').toBeString()
441+
442+
expectTypeOf(ret).toHaveProperty('foo6').toBeString()
443+
444+
expectTypeOf(ret).toHaveProperty('foo7').toBeString()
445+
446+
expectTypeOf(ret).toHaveProperty('foo8').toBeString()
447+
448+
expectTypeOf(ret).toHaveProperty('foo9').toBeString()
449+
450+
expectTypeOf(ret).not.toHaveProperty('foo10')
438451
}
439452

440-
// @ts-expect-error
441-
selector2({ foo: 'fizz' }, { bar: 42 })
453+
expectTypeOf(selector2).parameters.not.toHaveProperty('1')
442454

443455
const parametric = createSelector(
444456
[
@@ -500,17 +512,26 @@ describe('type tests', () => {
500512

501513
{
502514
const ret = parametric({ foo: 'fizz' }, { bar: 42 })
503-
const foo1: string = ret.foo1
504-
const foo2: string = ret.foo2
505-
const foo3: string = ret.foo3
506-
const foo4: string = ret.foo4
507-
const foo5: string = ret.foo5
508-
const foo6: string = ret.foo6
509-
const foo7: string = ret.foo7
510-
const foo8: string = ret.foo8
511-
const bar: number = ret.bar
512-
// @ts-expect-error
513-
ret.foo9
515+
516+
expectTypeOf(ret).toHaveProperty('foo1').toBeString()
517+
518+
expectTypeOf(ret).toHaveProperty('foo2').toBeString()
519+
520+
expectTypeOf(ret).toHaveProperty('foo3').toBeString()
521+
522+
expectTypeOf(ret).toHaveProperty('foo4').toBeString()
523+
524+
expectTypeOf(ret).toHaveProperty('foo5').toBeString()
525+
526+
expectTypeOf(ret).toHaveProperty('foo6').toBeString()
527+
528+
expectTypeOf(ret).toHaveProperty('foo7').toBeString()
529+
530+
expectTypeOf(ret).toHaveProperty('foo8').toBeString()
531+
532+
expectTypeOf(ret).toHaveProperty('bar').toBeNumber()
533+
534+
expectTypeOf(ret).not.toHaveProperty('foo9')
514535
}
515536
})
516537

@@ -526,9 +547,9 @@ describe('type tests', () => {
526547
(state: State, arg: string) => arg,
527548
(state: State, arg: number) => arg,
528549
baz => {
529-
const baz1: boolean = baz
530-
// @ts-expect-error
531-
const baz2: number = baz
550+
expectTypeOf(baz).toBeBoolean()
551+
552+
expectTypeOf(baz).not.toBeNumber()
532553
}
533554
)
534555

@@ -571,7 +592,8 @@ describe('type tests', () => {
571592
selector4({} as State)
572593
// @ts-expect-error
573594
selector4({} as State, 'blach')
574-
selector4({} as State, 'blach', 4)
595+
596+
expectTypeOf(selector4).toBeCallableWith({} as State, 'blach', 4)
575597

576598
// as above but a unknown 2nd argument
577599
const selector5 = createSelector(
@@ -584,36 +606,19 @@ describe('type tests', () => {
584606
selector5({} as State)
585607
// @ts-expect-error
586608
selector5({} as State, 'blach')
587-
selector5({} as State, 'blach', 4)
588-
589-
// This next section is now obsolete with the changes in TS 4.9
590-
// // @ts-expect-error It would be great to delete this, it is not correct.
591-
// // Due to what must be a TS bug? if the default parameter is used, we lose the type for prefix
592-
// // and it is impossible to type the selector without typing prefix
593-
// const selector6 = createSelector(
594-
// (state: State, prefix = '') => prefix + state.foo,
595-
// (str: string) => str
596-
// )
597-
598-
// // because the suppressed error above, selector6 has broken typings and doesn't allow a passed parameter
599-
// selector6({} as State)
600-
// // @ts-expect-error would be great if we can delete this, it should not error
601-
// selector6({} as State, 'blach')
602-
// // @ts-expect-error wrong type
603-
// selector6({} as State, 1)
609+
610+
expectTypeOf(selector5).toBeCallableWith({} as State, 'blach', 4)
604611

605612
// this is an example fixing selector6. We have to add a un-necessary typing in and magically the types are correct
606613
const selector7 = createSelector(
607-
(
608-
state: State,
609-
// eslint-disable-next-line @typescript-eslint/no-inferrable-types
610-
prefix: string = 'a'
611-
) => prefix + state.foo,
614+
(state: State, prefix: string = 'a') => prefix + state.foo,
612615
(str: string) => str
613616
)
614617

615-
selector7({} as State)
616-
selector7({} as State, 'blach')
618+
expectTypeOf(selector7).toBeCallableWith({} as State)
619+
620+
expectTypeOf(selector7).toBeCallableWith({} as State, 'blach')
621+
617622
// @ts-expect-error wrong type
618623
selector7({} as State, 1)
619624

@@ -624,9 +629,11 @@ describe('type tests', () => {
624629

625630
// @ts-expect-error needs a argument
626631
selector8({} as State)
632+
627633
// allowed to pass anything as the type is unknown
628-
selector8({} as State, 'blach')
629-
selector8({} as State, 2)
634+
expectTypeOf(selector8).toBeCallableWith({} as State, 'blach')
635+
636+
expectTypeOf(selector8).toBeCallableWith({} as State, 2)
630637
})
631638

632639
test('dynamic array argument', () => {

0 commit comments

Comments
 (0)