Skip to content

Commit

Permalink
feat: create js types
Browse files Browse the repository at this point in the history
  • Loading branch information
sno2 committed May 2, 2021
1 parent e9c06a0 commit d64fff1
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
35 changes: 35 additions & 0 deletions strings/js-string.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
export type Split<
T extends string,
F extends string = "",
$Draft extends readonly string[] = []
> =
//
T extends `${infer $Value}${F}${infer $Rest}`
? Split<$Rest, F, readonly [...$Draft, $Value]>
: F extends ""
? $Draft
: readonly [...$Draft, T];

export type Join<
T extends readonly (string | number)[],
F extends string = "",
$Draft extends string = ""
> =
//
T["length"] extends 0
? `${$Draft}`
: T extends [infer $First, ...infer $Rest]
? $Rest extends (string | number)[]
? $First extends string | number
? Join<$Rest, F, $Draft extends "" ? $First : `${$Draft}${F}${$First}`>
: never
: never
: never;

export type Length<T extends string> = Split<T>["length"];

export type CharAt<
T extends string,
I extends keyof $StrArr,
$StrArr = Split<T>
> = $StrArr[I];
1 change: 1 addition & 0 deletions strings/mod.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export * from "./case/mod.ts";
export * from "./js-string.ts";

0 comments on commit d64fff1

Please sign in to comment.