import { expectTypeOf, test } from 'vite-plus/test'; import { get } from './get'; interface TestClass { normal: string; nested: { a: number; b: { c: boolean } }; arr: number[]; nestedArr: { sum: number; other: null }[]; deep: { arr: string[] }; deeplvl1: { deeplvl2: { deeplvl3: { deeplvl4: { value: RegExp } }[] } }[]; } test('get typing', () => { // eslint-disable-next-line @typescript-eslint/consistent-type-assertions const obj = {} as TestClass; expectTypeOf(get(obj, 'nested.a', null)).toMatchTypeOf(); expectTypeOf(get(obj, 'normal', null)).toMatchTypeOf(); expectTypeOf(get(obj, 'nested.a')).toMatchTypeOf(); expectTypeOf(get(obj, 'nested.b.c')).toMatchTypeOf(); expectTypeOf(get(obj, 'arr')).toMatchTypeOf(); expectTypeOf(get(obj, 'arr[13]')).toMatchTypeOf(); // @ts-expect-error expectTypeOf(get(obj, 'arr.13')).toMatchTypeOf(); expectTypeOf(get(obj, 'nestedArr[3].other')).toMatchTypeOf(); // @ts-expect-error expectTypeOf(get(obj, 'deep.deep')).toMatchTypeOf(); expectTypeOf(get(obj, 'deep.arr[333]')).toMatchTypeOf(); expectTypeOf(get(obj, 'deep.arr[333].length')).toMatchTypeOf(); // @ts-expect-error expectTypeOf(get(obj, 'nested["b"]["c"]')).toMatchTypeOf(); // @ts-expect-error expectTypeOf(get(obj, '')).toMatchTypeOf(); expectTypeOf(get(obj, '', 3)).toMatchTypeOf(); // @ts-expect-error expectTypeOf(get(obj, 'nested.asdfasdf')).toMatchTypeOf(); expectTypeOf(get(obj, 'deeplvl1[1].deeplvl2.deeplvl3[88].deeplvl4.value')).toMatchTypeOf(); // @ts-expect-error expectTypeOf(get(obj, 'deeplvl1[1].deeplvl2.deeplvl1[88].deeplvl4.value')).toMatchTypeOf(); expectTypeOf(get(obj, 'deeplvl1[1].deeplvl2.deeplvl1[88].deeplvl4.value', obj)).toMatchTypeOf(); expectTypeOf(get(obj, 'nested["dd"]', '')).toMatchTypeOf(); });