UNPKG

@kakasoo/proto-typescript

Version:

Utility types and implementations based on JavaScript prototypes.

106 lines 6.04 kB
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