🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
DemoInstallSign in
Socket

typed-path

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

typed-path

Type safe object string paths for typescript.

2.2.3
latest
Source
npm
Version published
Weekly downloads
2.5K
-51.56%
Maintainers
1
Weekly downloads
 
Created
Source

Typed Path

https://nodei.co/npm/typed-path.svg?downloads=true&downloadRank=true&stars=true

Travis Hits Contributions welcome GitHub top language David npm bundle size GitHub last commit Snyk Vulnerabilities for GitHub Repo GitHub issues Code Climate maintainability Code Climate technical debt codecov

Overview

This small utility helps to extract type information from a TypeScript class, interface or type to use it in your code.

Example:

import {typedPath} from 'typed-path';

type TestType = {
    a: {
        testFunc: () => {result: string};
        b: {
            arrayOfArrays: string[][];
            c: {
                d: number;
            };
        }[];
    };
};

console.log(typedPath<TestType>().a.b[5].c.d.$rawPath);
/*
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.

Features

Errors

With typed-path, typescript can check paths and warns you about errors.

Path access methods

Default

.$path

@m-abboud
Also, you can get access to the path string using $path special field.

Like this:

    console.log(tp<TestType>().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

    console.log(tp<TestType>().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.

    console.log(tp<TestType>().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:

Example: 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:

const testAdditionalHandlers = {
    $url: (path: TypedPathKey[]) => path.join('/')
}

console.log(tp<TestType, typeof testAdditionalHandlers>(testAdditionalHandlers).a.b.c.$url); // this will output "a/b/c"

The additional handlers are also chainable:

const testAdditionalHandlers = {
    $abs: (path: TypedPathKey[]) => typedPath<TestType, typeof testAdditionalHandlers>(testAdditionalHandlers, ['', ...path]),
    $url: (path: TypedPathKey[]) => path.join('/'),
    $length: (path: TypedPathKey[]) => path.length
}

console.log(tp<TestType, typeof testAdditionalHandlers>(testAdditionalHandlers).a.b.c.$abs.$url); // this will output "/a/b/c"

Suggestions

Also, typed-path allows typescript to suggest field names for you.

License

Copyright (c) 2021 Oleksandr Beshchuk <bs.alex.mail@gmail.com>
Licensed under the Apache License.

Keywords

lodash

FAQs

Package last updated on 17 Sep 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts