String overview
This module provides utility functions and type class instances for working with the string
type in TypeScript. It includes functions for basic string manipulation, as well as type class instances for Equivalence
, Order
, Semigroup
, and Monoid
.
Added in v1.0.0
Table of contents
- guards
- instances
- utils
- Concat (type alias)
- Trim (type alias)
- TrimEnd (type alias)
- TrimStart (type alias)
- at
- capitalize
- charAt
- charCodeAt
- codePointAt
- concat
- empty
- endsWith
- includes
- indexOf
- isEmpty
- isNonEmpty
- lastIndexOf
- length
- linesWithSeparators
- localeCompare
- match
- matchAll
- normalize
- padEnd
- padStart
- repeat
- replace
- replaceAll
- search
- slice
- split
- startsWith
- stripMargin
- stripMarginWith
- substring
- takeLeft
- takeRight
- toLocaleLowerCase
- toLocaleUpperCase
- toLowerCase
- toUpperCase
- trim
- trimEnd
- trimStart
- uncapitalize
guards
isString
Tests if a value is a string
.
Signature
export declare const isString: Refinement<unknown, string>
Example
import { isString } from '@effect/data/String'
assert.deepStrictEqual(isString('a'), true)
assert.deepStrictEqual(isString(1), false)
Added in v1.0.0
instances
Equivalence
Signature
export declare const Equivalence: equivalence.Equivalence<string>
Added in v1.0.0
Order
Signature
export declare const Order: order.Order<string>
Added in v1.0.0
utils
Concat (type alias)
Concatenates two strings at the type level.
Signature
export type Concat<A extends string, B extends string> = `${A}${B}`
Added in v1.0.0
Trim (type alias)
Signature
export type Trim<A extends string> = TrimEnd<TrimStart<A>>
Added in v1.0.0
TrimEnd (type alias)
Signature
export type TrimEnd<A extends string> = A extends `${infer B} `
? TrimEnd<B>
: A extends `${infer B}\n`
? TrimEnd<B>
: A extends `${infer B}\t`
? TrimEnd<B>
: A extends `${infer B}\r`
? TrimEnd<B>
: A
Added in v1.0.0
TrimStart (type alias)
Signature
export type TrimStart<A extends string> = A extends ` ${infer B}`
? TrimStart<B>
: A extends `\n${infer B}`
? TrimStart<B>
: A extends `\t${infer B}`
? TrimStart<B>
: A extends `\r${infer B}`
? TrimStart<B>
: A
Added in v1.0.0
at
Signature
export declare const at: {
(index: number): (self: string) => Option.Option<string>
(self: string, index: number): Option.Option<string>
}
Example
import * as S from '@effect/data/String'
import * as Option from '@effect/data/Option'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('abc', S.at(1)), Option.some('b'))
assert.deepStrictEqual(pipe('abc', S.at(4)), Option.none())
Added in v1.0.0
capitalize
Signature
export declare const capitalize: <T extends string>(self: T) => Capitalize<T>
Example
import * as S from '@effect/data/String'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('abc', S.capitalize), 'Abc')
Added in v1.0.0
charAt
Signature
export declare const charAt: {
(index: number): (self: string) => Option.Option<string>
(self: string, index: number): Option.Option<string>
}
Example
import * as S from '@effect/data/String'
import * as Option from '@effect/data/Option'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('abc', S.charAt(1)), Option.some('b'))
assert.deepStrictEqual(pipe('abc', S.charAt(4)), Option.none())
Added in v1.0.0
charCodeAt
Signature
export declare const charCodeAt: {
(index: number): (self: string) => Option.Option<number>
(self: string, index: number): Option.Option<number>
}
Example
import * as S from '@effect/data/String'
import * as Option from '@effect/data/Option'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('abc', S.charCodeAt(1)), Option.some(98))
assert.deepStrictEqual(pipe('abc', S.charCodeAt(4)), Option.none())
Added in v1.0.0
codePointAt
Signature
export declare const codePointAt: {
(index: number): (self: string) => Option.Option<number>
(self: string, index: number): Option.Option<number>
}
Example
import * as S from '@effect/data/String'
import * as Option from '@effect/data/Option'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('abc', S.codePointAt(1)), Option.some(98))
Added in v1.0.0
concat
Concatenates two strings at runtime.
Signature
export declare const concat: {
<B extends string>(that: B): <A extends string>(self: A) => `${A}${B}`
<A extends string, B extends string>(self: A, that: B): `${A}${B}`
}
Added in v1.0.0
empty
The empty string ""
.
Signature
export declare const empty: ''
Added in v1.0.0
endsWith
Signature
export declare const endsWith: (searchString: string, position?: number) => (self: string) => boolean
Added in v1.0.0
includes
Returns true
if searchString
appears as a substring of self
, at one or more positions that are greater than or equal to position
; otherwise, returns false
.
Signature
export declare const includes: (searchString: string, position?: number) => (self: string) => boolean
Added in v1.0.0
indexOf
Signature
export declare const indexOf: (searchString: string) => (self: string) => Option.Option<number>
Example
import * as S from '@effect/data/String'
import * as Option from '@effect/data/Option'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('abbbc', S.indexOf('b')), Option.some(1))
Added in v1.0.0
isEmpty
Test whether a string
is empty.
Signature
export declare const isEmpty: (self: string) => self is ''
Example
import * as S from '@effect/data/String'
assert.deepStrictEqual(S.isEmpty(''), true)
assert.deepStrictEqual(S.isEmpty('a'), false)
Added in v1.0.0
isNonEmpty
Test whether a string
is non empty.
Signature
export declare const isNonEmpty: (self: string) => boolean
Added in v1.0.0
lastIndexOf
Signature
export declare const lastIndexOf: (searchString: string) => (self: string) => Option.Option<number>
Example
import * as S from '@effect/data/String'
import * as Option from '@effect/data/Option'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('abbbc', S.lastIndexOf('b')), Option.some(3))
assert.deepStrictEqual(pipe('abbbc', S.lastIndexOf('d')), Option.none())
Added in v1.0.0
length
Calculate the number of characters in a string
.
Signature
export declare const length: (self: string) => number
Example
import * as S from '@effect/data/String'
assert.deepStrictEqual(S.length('abc'), 3)
Added in v1.0.0
linesWithSeparators
Returns an IterableIterator
which yields each line contained within the string as well as the trailing newline character.
Signature
export declare const linesWithSeparators: (s: string) => LinesIterator
Added in v1.0.0
localeCompare
Signature
export declare const localeCompare: (
that: string,
locales?: Array<string>,
options?: Intl.CollatorOptions
) => (self: string) => Ordering.Ordering
Example
import * as S from '@effect/data/String'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('a', S.localeCompare('b')), -1)
assert.deepStrictEqual(pipe('b', S.localeCompare('a')), 1)
assert.deepStrictEqual(pipe('a', S.localeCompare('a')), 0)
Added in v1.0.0
match
It is the pipe
-able version of the native match
method.
Signature
export declare const match: (regexp: RegExp | string) => (self: string) => Option.Option<RegExpMatchArray>
Added in v1.0.0
matchAll
It is the pipe
-able version of the native matchAll
method.
Signature
export declare const matchAll: (regexp: RegExp) => (self: string) => IterableIterator<RegExpMatchArray>
Added in v1.0.0
normalize
Signature
export declare const normalize: (form?: 'NFC' | 'NFD' | 'NFKC' | 'NFKD') => (self: string) => string
Example
import * as S from '@effect/data/String'
import { pipe } from '@effect/data/Function'
const str = '\u1E9B\u0323'
assert.deepStrictEqual(pipe(str, S.normalize()), '\u1E9B\u0323')
assert.deepStrictEqual(pipe(str, S.normalize('NFC')), '\u1E9B\u0323')
assert.deepStrictEqual(pipe(str, S.normalize('NFD')), '\u017F\u0323\u0307')
assert.deepStrictEqual(pipe(str, S.normalize('NFKC')), '\u1E69')
assert.deepStrictEqual(pipe(str, S.normalize('NFKD')), '\u0073\u0323\u0307')
Added in v1.0.0
padEnd
Signature
export declare const padEnd: (maxLength: number, fillString?: string) => (self: string) => string
Example
import * as S from '@effect/data/String'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('a', S.padEnd(5)), 'a ')
assert.deepStrictEqual(pipe('a', S.padEnd(5, '_')), 'a____')
Added in v1.0.0
padStart
Signature
export declare const padStart: (maxLength: number, fillString?: string) => (self: string) => string
Example
import * as S from '@effect/data/String'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('a', S.padStart(5)), ' a')
assert.deepStrictEqual(pipe('a', S.padStart(5, '_')), '____a')
Added in v1.0.0
repeat
Signature
export declare const repeat: (count: number) => (self: string) => string
Example
import * as S from '@effect/data/String'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('a', S.repeat(5)), 'aaaaa')
Added in v1.0.0
replace
Signature
export declare const replace: (searchValue: string | RegExp, replaceValue: string) => (self: string) => string
Example
import * as S from '@effect/data/String'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('abc', S.replace('b', 'd')), 'adc')
Added in v1.0.0
replaceAll
Signature
export declare const replaceAll: (searchValue: string | RegExp, replaceValue: string) => (self: string) => string
Example
import * as S from '@effect/data/String'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('ababb', S.replaceAll('b', 'c')), 'acacc')
assert.deepStrictEqual(pipe('ababb', S.replaceAll(/ba/g, 'cc')), 'accbb')
Added in v1.0.0
search
Signature
export declare const search: {
(regexp: RegExp | string): (self: string) => Option.Option<number>
(self: string, regexp: RegExp | string): Option.Option<number>
}
Example
import * as S from '@effect/data/String'
import * as Option from '@effect/data/Option'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('ababb', S.search('b')), Option.some(1))
assert.deepStrictEqual(pipe('ababb', S.search(/abb/)), Option.some(2))
assert.deepStrictEqual(pipe('ababb', S.search('d')), Option.none())
Added in v1.0.0
slice
Signature
export declare const slice: (start?: number, end?: number) => (self: string) => string
Example
import * as S from '@effect/data/String'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('abcd', S.slice(1, 3)), 'bc')
Added in v1.0.0
split
Signature
export declare const split: {
(separator: string | RegExp): (self: string) => [string, ...string[]]
(self: string, separator: string | RegExp): [string, ...string[]]
}
Example
import * as S from '@effect/data/String'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('abc', S.split('')), ['a', 'b', 'c'])
assert.deepStrictEqual(pipe('', S.split('')), [''])
Added in v1.0.0
startsWith
Signature
export declare const startsWith: (searchString: string, position?: number) => (self: string) => boolean
Added in v1.0.0
stripMargin
For every line in this string, strip a leading prefix consisting of blanks or control characters followed by the "|"
character from the line.
Signature
export declare const stripMargin: (self: string) => string
Added in v1.0.0
stripMarginWith
For every line in this string, strip a leading prefix consisting of blanks or control characters followed by the character specified by marginChar
from the line.
Signature
export declare const stripMarginWith: {
(marginChar: string): (self: string) => string
(self: string, marginChar: string): string
}
Added in v1.0.0
substring
Signature
export declare const substring: (start: number, end?: number) => (self: string) => string
Example
import * as S from '@effect/data/String'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('abcd', S.substring(1)), 'bcd')
assert.deepStrictEqual(pipe('abcd', S.substring(1, 3)), 'bc')
Added in v1.0.0
takeLeft
Keep the specified number of characters from the start of a string.
If n
is larger than the available number of characters, the string will be returned whole.
If n
is not a positive number, an empty string will be returned.
If n
is a float, it will be rounded down to the nearest integer.
Signature
export declare const takeLeft: { (n: number): (self: string) => string; (self: string, n: number): string }
Example
import * as S from '@effect/data/String'
assert.deepStrictEqual(S.takeLeft('Hello World', 5), 'Hello')
Added in v1.0.0
takeRight
Keep the specified number of characters from the end of a string.
If n
is larger than the available number of characters, the string will be returned whole.
If n
is not a positive number, an empty string will be returned.
If n
is a float, it will be rounded down to the nearest integer.
Signature
export declare const takeRight: { (n: number): (self: string) => string; (self: string, n: number): string }
Example
import * as S from '@effect/data/String'
assert.deepStrictEqual(S.takeRight('Hello World', 5), 'World')
Added in v1.0.0
toLocaleLowerCase
Signature
export declare const toLocaleLowerCase: (locale?: string | Array<string>) => (self: string) => string
Example
import * as S from '@effect/data/String'
import { pipe } from '@effect/data/Function'
const str = '\u0130'
assert.deepStrictEqual(pipe(str, S.toLocaleLowerCase('tr')), 'i')
Added in v1.0.0
toLocaleUpperCase
Signature
export declare const toLocaleUpperCase: (locale?: string | Array<string>) => (self: string) => string
Example
import * as S from '@effect/data/String'
import { pipe } from '@effect/data/Function'
const str = 'i\u0307'
assert.deepStrictEqual(pipe(str, S.toLocaleUpperCase('lt-LT')), 'I')
Added in v1.0.0
toLowerCase
Signature
export declare const toLowerCase: <T extends string>(self: T) => Lowercase<T>
Example
import * as S from '@effect/data/String'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('A', S.toLowerCase), 'a')
Added in v1.0.0
toUpperCase
Signature
export declare const toUpperCase: <S extends string>(self: S) => Uppercase<S>
Example
import * as S from '@effect/data/String'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('a', S.toUpperCase), 'A')
Added in v1.0.0
trim
Signature
export declare const trim: <A extends string>(self: A) => TrimEnd<TrimStart<A>>
Example
import * as S from '@effect/data/String'
assert.deepStrictEqual(S.trim(' a '), 'a')
Added in v1.0.0
trimEnd
Signature
export declare const trimEnd: <A extends string>(self: A) => TrimEnd<A>
Example
import * as S from '@effect/data/String'
assert.deepStrictEqual(S.trimEnd(' a '), ' a')
Added in v1.0.0
trimStart
Signature
export declare const trimStart: <A extends string>(self: A) => TrimStart<A>
Example
import * as S from '@effect/data/String'
assert.deepStrictEqual(S.trimStart(' a '), 'a ')
Added in v1.0.0
uncapitalize
Signature
export declare const uncapitalize: <T extends string>(self: T) => Uncapitalize<T>
Example
import * as S from '@effect/data/String'
import { pipe } from '@effect/data/Function'
assert.deepStrictEqual(pipe('ABC', S.uncapitalize), 'aBC')
Added in v1.0.0