https://github.com/p-toy-factory/ts-nameof-proxy
Type safely generate property name or path of variable.
https://github.com/p-toy-factory/ts-nameof-proxy
form nameof
Last synced: 7 months ago
JSON representation
Type safely generate property name or path of variable.
- Host: GitHub
- URL: https://github.com/p-toy-factory/ts-nameof-proxy
- Owner: p-toy-factory
- License: mit
- Created: 2022-07-26T16:32:03.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-07-08T09:19:41.000Z (11 months ago)
- Last Synced: 2024-11-16T18:06:46.140Z (7 months ago)
- Topics: form, nameof
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/ts-nameof-proxy
- Size: 291 KB
- Stars: 12
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# ts-nameof-proxy
`nameof` in TypeScript, no compiler required. Implemented using proxy with some limitations.
Type safely generate property name or path of variable, referenced properties can be renamed in bulk by the editor.
## Install
```
npm install ts-nameof-proxy
```## Usage
```ts
nameOf(student, (s) => s.age); // "age"
nameOf(student, (s) => s.name.length); // "length"
nameOf((s) => s.name.length); // "length"pathOf(student, (s) => s.age); // ["age"]
pathOf(student, (s) => s.name.length); // ["name", "length"]
pathOf((s) => s.name.length); // ["name", "length"]pathStringOf(student, (s) => s.name.firstName[0]); // "['name']['firstName']['0']"
pathStringOf((s) => s.name.firstName[0]); // "['name']['firstName']['0']"namesOf(student, (s) => (s.age, s.name.length)); // ["age", "length"]
namesOf((s) => (s.age, s.name.length)); // ["age", "length"]pathsOf(student, (s) => (s.age, s.name.length)); // [["age"], ["name", "length"]]
pathsOf((s) => (s.age, s.name.length)); // [["age"], ["name", "length"]]pathStringsOf(student, (s) => (s.name, s.name.firstName[0])); // ["['name']", "['name']['firstName']['0']"]
pathStringsOf((s) => (s.name, s.name.firstName[0])); // ["['name']", "['name']['firstName']['0']"]
```## Limitations
The example below is NOT feasible:
```ts
nameOf(student); // ❌ Will throw error
nameOf(student, (student) => student); // ❌ Will throw error
```## Example
```tsx
const people = [
{ name: { firstName: "John", lastName: "Doe" } },
{ name: { firstName: "Jane", lastName: "Smith" } },
];{}}>
{({ values }) =>
values.map((person, index) => (
values[index].name.firstName
)}
/>
values[index].name.lastName)}
/>
))
}
{/*
Output:
*/}
;
```