diff --git a/packages/types/src/codec/AbstractArray.ts b/packages/types/src/codec/AbstractArray.ts index 2660b2a9ea..56cac3c504 100644 --- a/packages/types/src/codec/AbstractArray.ts +++ b/packages/types/src/codec/AbstractArray.ts @@ -159,4 +159,11 @@ export abstract class AbstractArray extends Array implements public includes (check: unknown): boolean { return this.some((value: T) => value.eq(check)); } + + /** + * @description Returns a slice of an array + */ + public slice (start?: number, end?: number): T[] { + return this.toArray().slice(start, end); + } } diff --git a/packages/types/src/codec/Vec.spec.ts b/packages/types/src/codec/Vec.spec.ts index b65f8a117f..62db80ec87 100644 --- a/packages/types/src/codec/Vec.spec.ts +++ b/packages/types/src/codec/Vec.spec.ts @@ -6,6 +6,7 @@ import type { Codec, CodecTo } from '../types'; import { Metadata } from '@polkadot/metadata'; import rpcMetadata from '@polkadot/metadata/static'; +import { randomAsU8a } from '@polkadot/util-crypto'; import { createTypeUnsafe, TypeRegistry } from '../create'; import { GenericAccountId as AccountId } from '../generic'; @@ -170,5 +171,14 @@ describe('Vec', (): void => { expect(vec.indexOf(myId)).toEqual(2); }); + + it('allows a slice operator', (): void => { + const vec = registry.createType('Vec', [ + randomAsU8a(), randomAsU8a(), randomAsU8a(), randomAsU8a(), randomAsU8a(), randomAsU8a(), randomAsU8a(), randomAsU8a(), randomAsU8a(), randomAsU8a() + ]); + + expect(vec).toHaveLength(10); + expect(vec.slice(2, 7)).toHaveLength(5); + }); }); });