Type safe object string paths for typescript.
npm install typed-path



!GitHub top language
!David
!npm bundle size
!GitHub last commit
!Snyk Vulnerabilities for GitHub Repo




---
This small utility helps to extract type information from a TypeScript class, interface or type to use it in your code.
Example:
``js
import {typedPath} from 'typed-path';
type TestType = {
a: {
testFunc: () => {result: string};
b: {
arrayOfArrays: string[][];
c: {
d: number;
};
}[];
};
};
console.log(typedPath
/*
Outputs
["a", "b", 5, "c", "d"]
*/
`
Please see other path access methods and how to add custom path access methods below.
The utility might also be used to add type protection to such methods as _.get, _.map, _.set, R.pluck from libraries like lodash, ramda.
It is recommended, though, to use optional chaining instead.
---
With typed-path, typescript can check paths and warns you about errors.

special field. Like this:
`js
console.log(tp().a.b.c.d.$path); // this will output "a.b.c.d"
`##### .$raw
@dcbrwn
If you need a raw path, which is of type
string[] - you can get it using $raw special field.
*Deprecated, since it transforms symbols and numbers to strings, which might be not an expected behavior (the method name is "raw").
Please use .$rawPath*
`js
console.log(tp().a.b.c.d.$raw); // this will output ["a", "b", "c", "d"]
`##### .$rawPath
If you need a raw path, which is of type
(string | number | Symbol)[] - you can get it using $rawPath special field.
`js
console.log(tp().a.b[5].c.d.$rawPath); // this will output ["a", "b", 5, "c", "d"]
`The
$rawPath is something that you might want to use with the following methods from
Ramda, to add type safety on the path:
- R.assocPath,
- R.dissocPath,
- R.hasPath,
- R.path,
- R.pathEq,
- R.pathOr,
- R.paths,
- R.lensPathExample: https://codesandbox.io/s/typed-path-ramda-assoc-path-x3qby?file=/src/index.ts
#### Additional handlers
@nick-lvov-dev
You can extend path handlers functionality using additional handlers:
`js
const testAdditionalHandlers = {
$url: (path: TypedPathKey[]) => path.join('/')
}console.log(tp(testAdditionalHandlers).a.b.c.$url); // this will output "a/b/c"
`The additional handlers are also chainable:
`js
const testAdditionalHandlers = {
$abs: (path: TypedPathKey[]) => typedPath(testAdditionalHandlers, ['', ...path]),
$url: (path: TypedPathKey[]) => path.join('/'),
$length: (path: TypedPathKey[]) => path.length
}console.log(tp(testAdditionalHandlers).a.b.c.$abs.$url); // this will output "/a/b/c"
`---
$3
Also,
typed-path` allows typescript to suggest field names for you.
Copyright (c) 2021 Oleksandr Beshchuk <bs.alex.mail@gmail.com>
Licensed under the Apache License.