prefer-ts-extras-string-split
Prefer stringSplit from ts-extras over string.split(...).
stringSplit(...) can preserve stronger tuple-like inference for literal separators.
Targeted pattern scopeโ
This rule focuses on direct string.split(separator) calls that can be migrated to stringSplit(string, separator) with deterministic fixes.
string.split(separator)call sites that can usestringSplit(string, separator).
Alias indirection, wrapper helpers, and non-canonical call shapes are excluded to keep stringSplit(string, separator) migrations safe.
What this rule reportsโ
This rule reports string.split(separator) call sites when stringSplit(string, separator) is the intended replacement.
string.split(separator)call sites that can usestringSplit(string, separator).
Why this rule existsโ
stringSplit standardizes string tokenization and can preserve stronger typing for literal separators and known string shapes.
- Split usage follows one helper style across modules.
- Destructuring from split results is easier to type in strict code.
- Native/helper split styles are not mixed.
โ Incorrectโ
const parts = monitorKey.split(":");
โ Correctโ
const parts = stringSplit(monitorKey, ":");
Behavior and migration notesโ
- Runtime behavior matches native
String.prototype.split. - Separator semantics (string/regex, limits) are preserved.
- Literal-based tuple inference depends on the source string and separator types.
Additional examplesโ
โ Incorrect โ Additional exampleโ
const [major, minor] = version.split(".");
โ Correct โ Additional exampleโ
const [major, minor] = stringSplit(version, ".");
โ Correct โ Repository-wide usageโ
const pathParts = stringSplit(route, "/");
ESLint flat config exampleโ
import typefest from "eslint-plugin-typefest";
export default [
{
plugins: { typefest },
rules: {
"typefest/prefer-ts-extras-string-split": "error",
},
},
];
When not to use itโ
Disable this rule if your code style standardizes on direct .split() usage.
Package documentationโ
ts-extras package documentation:
Source file: source/string-split.ts
/**
A strongly-typed version of `String#split()` that returns a tuple for literal strings.
@example
```
import {stringSplit} from 'ts-extras';
const parts = stringSplit('foo-bar-baz', '-');
//=> ['foo', 'bar', 'baz']
// ^? ['foo', 'bar', 'baz']
const [first, second] = stringSplit('top-left', '-');
//=> first: 'top', second: 'left'
const placement = 'top-start' as const;
const side = stringSplit(placement, '-')[0];
//=> 'top'
// ^? 'top'
// Dynamic strings return string[]
const dynamic: string = 'a-b-c';
const dynamicParts = stringSplit(dynamic, '-');
//=> string[]
```
@category Improved builtin
*/
Rule catalog ID: R034