function slice( begin, end ) {
			var tmp;
			var f;
			var i;
			var j;

			if ( this !== tuple ) { // eslint-disable-line no-invalid-this
				throw new TypeError( 'invalid invocation. `this` is not host tuple.' );
			}
			if ( arguments.length === 0 ) {
				return namedtypedtuple( tuple, dtype );
			}
			i = begin;
			if ( !isInteger( i ) ) {
				throw new TypeError( format( 'invalid argument. First argument must be an integer. Value: `%s`.', begin ) );
			}
			if ( i < 0 ) {
				i = nfields + i;
				if ( i < 0 ) {
					i = 0;
				}
			}
			if ( arguments.length === 1 ) {
				j = nfields;
			} else {
				j = end;
				if ( !isInteger( j ) ) {
					throw new TypeError( format( 'invalid argument. Second argument must be an integer. Value: `%s`.', end ) );
				}
				if ( j < 0 ) {
					j = nfields + j;
					if ( j < 0 ) {
						j = 0;
					}
				} else if ( j > nfields ) {
					j = nfields;
				}
			}
			if ( i >= j ) {
				return null;
			}
			f = [];
			tmp = [];
			for ( ; i < j; i++ ) {
				f.push( fields[ indices[i] ] );
				tmp.push( tuple[ i ] );
			}
			return factory( f, opts )( tmp, dtype );
		}
Copies elements to a new tuple with the same underlying data type as the host tuple.

## Notes

-   If the function is unable to resolve indices to a non-empty tuple subsequence, the function returns `null`.

@private
@memberof tuple
@param {integer} [begin=0] - start element index (inclusive)
@param {integer} [end=tuple.length] - end element index (exclusive)
@throws {TypeError} `this` must be the host tuple
@throws {TypeError} first argument must be an integer
@throws {TypeError} second argument must be an integer
@returns {(TypedArray|null)} new tuple