-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Recommend: Don't use this package #121
Comments
Thank you for your candor. It would be awesome if you also write a note to this answer https://stackoverflow.com/a/33556815/1177597 when you have spare time. |
Can you show how it should be used? |
@PKnight-CheckWriters I updated the main post to show some examples. |
I published package ts-keyof. Maybe it will be useful for someone. Thanks for ts-nameof! I used it about 3 years, but now I need use esbuild and swc. |
@dsherret I'm on the fence about your recommendation... When one uses the If this issue was addressed by the VSCode team, I would probably try and make the switch. |
@wh1t3cAt1k I published package ts-nameof-proxy, referenced properties can be renamed by VS Code and you can try to use it. |
@wh1t3cAt1k If for you enough ts-keyof then you can disable I declined rename for interface property in my lib, because it doesn't work with TypeScript Refactoring correctly: sotnikov-link/ts-keyof#1 |
If I am understanding it right, there is still one important consideration that still makes this library not deserving of deprecation. When using With runtime-based libraries, you need to actually import the whole dependency tree of the entity to "nameof", potentially introducing a build/runtime slowdown and even introducing circular dependencies. I'm not completely persuaded that having no pre-processing steps is a big win. To me, it was never a hassle to set up a simple babel macro. If there is a goal to transfer to swc, it might expose some extensibility too? |
@dsherret Thanks for being transparent about the state of this package, it's much appreciated. Can you show me how I would go about implementing |
There's still no way to get the name of the interface itself as a string, though. |
How can I use this simplified method for variables without a parent object? Something like export function get_some_info(
date: string | number,
...etc
) {
if (!date) {
console.log(`${nameof(date)} is required!`);
return;
}
// ...etc
} |
I know this is quite a late answer but just for clarification:
So there is no drop-in replacement of |
@celluj34 I think the package written by @sotnikov-link will help you. import { keyof } from "ts-keyof";
export function get_some_info(
date: string | number,
...etc
) {
if (!date) {
console.log(`${keyof({ date })} is required!`);
return;
}
// ...etc |
Could we get some more explanation on why this is no longer recommended? It seems to me, if your environment is controllable, then the pros outway the cons. |
Hello everyone All you have to do is remove the Feel free to check it out: |
improved simple solution
add example
|
I now recommend not using this package or any other compiler transforms. It's neat, but it creates code that is not portable and makes it hard to switch to new build systems. The current solutions for injecting compiler transforms are hacky and I can't imagine the TS compiler ever supporting this out of the box.
I personally now just use the following function. It's simple and it works for most cases... of course it's not as featureful, but it gets you 90% of the way there.
Example Use
The text was updated successfully, but these errors were encountered: