@kakasoo/proto-typescript
Version:
Utility types and implementations based on JavaScript prototypes.
106 lines • 6.04 kB
TypeScript
import { ToPrimitive } from '../interfaces/to-primitive.interface';
import { StringPrototype } from '../prototypes';
import { ArrayType, FunctionType, NumberType, StringType } from '../types';
import { ReadonlyOrNot } from '../types/primitive.type';
import { TypedArray } from './typed-array.class';
import { TypedBoolean } from './typed-boolean.class';
import { TypedNumber } from './typed-number.class';
import { TypedObject } from './typed-object.class';
/**
* @todo allow each method's parameter to use TypedClass format
*/
export declare class TypedString<T extends string | number | boolean = ''> extends TypedObject<T> implements Pick<FunctionType.MethodsFrom<String>, 'split' | 'at' | 'concat' | 'trimStart' | 'trimEnd' | 'trim' | 'padEnd' | 'padStart' | 'toLowerCase' | 'toUpperCase' | 'includes' | 'substring' | 'startsWith' | 'endsWith' | 'repeat' | 'indexOf' | 'slice'>, ToPrimitive<T | `${T}`>, Iterable<ArrayType.ElementOf<StringType.Split<`${T}`>>> {
[n: number]: ArrayType.At<StringType.Split<`${T}`>, number>;
private readonly string;
constructor(data?: T);
[Symbol.iterator](): Iterator<ArrayType.ElementOf<StringType.Split<`${T}`>>, any>;
/**
* @inheritdoc
*/
slice<Start extends number, End extends number>(start?: Start | TypedNumber<Start>, end?: End | TypedNumber<End>): TypedString<ReturnType<typeof StringPrototype.slice<`${T}`, Start, End>>>;
/**
* @inheritdoc
*/
concat<Strings extends ReadonlyOrNot<(string | TypedString<string>)[]>>(...strings: Strings): TypedString<ReturnType<typeof StringPrototype.concat<`${T}`, TypedString.ValueTypes<Strings>>>>;
/**
* @inheritdoc
*/
repeat<Counter extends number = 0>(counter?: Counter | TypedNumber<Counter>): TypedString<StringType.Repeat<`${T}`, Counter>>;
/**
* @inheritdoc
*/
indexOf<SearchString extends string = '', Position extends number = 0>(searchString?: SearchString | TypedString<SearchString>, position?: Position | TypedNumber<Position>): TypedNumber<ReturnType<typeof StringPrototype.indexOf<`${T}`, SearchString, Position>>>;
/**
* @inheritdoc
*/
startsWith<SearchString extends string = '', Position extends number = 0>(searchString?: SearchString | TypedString<SearchString>, position?: Position | TypedNumber<Position>): TypedBoolean<ReturnType<typeof StringPrototype.startsWith<`${T}`, SearchString, Position>>>;
/**
* @inheritdoc
*/
endsWith<SearchString extends string = '', EndPosition extends number = 0>(searchString?: SearchString | TypedString<SearchString>, position?: EndPosition | TypedNumber<EndPosition>): TypedBoolean<ReturnType<typeof StringPrototype.endsWith<`${T}`, SearchString, EndPosition>>>;
/**
* @inheritdoc
*/
substring<Start extends number, End extends number | never = never>(start: Start, end?: End): TypedString<ReturnType<typeof StringPrototype.substring<`${T}`, Start, End>>>;
/**
* @inheritdoc
*/
includes<SearchString extends string = '', Position extends number = 0>(searchString?: SearchString | TypedString<SearchString>, position?: Position | TypedNumber<Position>): TypedBoolean<ReturnType<typeof StringPrototype.includes<`${T}`, SearchString, Position>>>;
/**
* @inheritdoc
*/
toLowerCase(): TypedString<ReturnType<typeof StringPrototype.toLowerCase<`${T}`>>>;
/**
* @inheritdoc
*/
toUpperCase(): TypedString<ReturnType<typeof StringPrototype.toUpperCase<`${T}`>>>;
/**
* @inheritdoc
*/
padStart<TargetLength extends number = StringType.Length<`${T}`>, PadString extends string = ' '>(targetLength?: TargetLength | TypedNumber<TargetLength>, padString?: PadString | TypedString<PadString>): TypedString<ReturnType<typeof StringPrototype.padStart<`${T}`, TargetLength, PadString>>>;
/**
* @inheritdoc
*/
padEnd<TargetLength extends number = StringType.Length<`${T}`>, PadString extends string = ' '>(targetLength?: TargetLength | TypedNumber<TargetLength>, padString?: PadString | TypedString<PadString>): TypedString<ReturnType<typeof StringPrototype.padEnd<`${T}`, TargetLength, PadString>>>;
/**
* @inheritdoc
*/
trim(): TypedString<ReturnType<typeof StringPrototype.trim<`${T}`>>>;
/**
* @inheritdoc
*/
trimEnd(): TypedString<ReturnType<typeof StringPrototype.trimEnd<`${T}`>>>;
/**
* @inheritdoc
*/
trimStart(): TypedString<ReturnType<typeof StringPrototype.trimStart<`${T}`>>>;
typedLength(): TypedNumber<StringType.Length<`${T}`>>;
get length(): StringType.Length<`${T}`>;
/**
* If a value greater than the length of the current data is given as an index, it is inferred as underdefined that no wrapper exists.
* @inheritdoc
*/
at<Index extends number = 0>(index?: Index | TypedNumber<Index>): (Index extends StringType.Length<`${T}`> ? false : [NumberType.Sub<StringType.Length<`${T}`>, Index>] extends [never] ? false : true) extends true ? TypedString<StringType.At<`${T}`, Index>> : undefined;
/**
* type-safe split.
*
* @inheritdoc
*/
split<Splitter extends string = '', Limit extends number = 0>(splitter?: Splitter | TypedString<Splitter>, limit?: Limit | TypedNumber<Limit>): TypedArray<ReturnType<typeof StringPrototype.split<`${T}`, Splitter, Limit>>>;
toPrimitive(): T;
toPrimitive(): `${T}`;
}
export declare namespace TypedString {
/**
* Inference of value type.
*/
type ValueType<Pointer extends TypedString<any> | string> = Pointer extends TypedString<infer T> ? `${T}` : Pointer extends string ? Pointer : never;
/**
* Inference of value types.
*/
type ValueTypes<Pointers extends ReadonlyOrNot<(TypedString<any> | string)[]>> = Pointers extends [
infer F extends TypedString<infer T> | string,
...infer Rest extends ReadonlyOrNot<(TypedString<any> | string)[]>
] ? [TypedString.ValueType<F>, ...TypedString.ValueTypes<Rest>] : [];
}
//# sourceMappingURL=typed-string.class.d.ts.map