gpt4 book ai didi

javascript - 有没有办法将 Prop 的名称作为字符串获取?

转载 作者:行者123 更新时间:2023-11-30 13:54:34 25 4
gpt4 key购买 nike

我正在尝试概括一个重复 3-4 次的函数,我想知道是否有一种方法可以将属性故意转换为包含 Prop 名称的字符串,以便稍后访问它。

将某些东西用作 Type.prop.toString() 会说我正在使用该类型,就好像它是一个值一样。

假设我有一个 interface foo { bar: number, baz: number }我需要做一些事情:foo.bar.toString()

为了能够调用一些东西:

myFunction(foo.bar.toString())

它将作为:

myFunction(key: string) => {
otherFunction(this.fooInstance[key]);
//...
}

更多详情:

我想做的是:

  • myFunction(foo.bar.toString());
  • myFunction(foo.baz.toString());

我不这样做的原因(就像你用 ramda 做的那样):

  • myFunction("bar");
  • myFunction("baz");

是不是重构后会很容易忘记更新这部分。

我不需要为我的 Foo 类的每个键都这样做,只需要在调用 myFunction 时我需要声明的几个选定的键。

如果您有任何疑问,请随时提出,很遗憾,我不是最好的沟通者!

最佳答案

要实现您想要的效果,您需要将属性作为字符串传递。

所以这是正确的:

myFunction("bar");  
myFunction("baz");

要解决您的特定问题 - 即支持重构并仅允许已知属性 - 您需要告诉 TypeScript 将 key 的值限制为 IFoo 的已知属性:

interface IFoo {
bar: number
baz: number
}

myFunction(key: keyof IFoo){ // <-- `key` may only match the name of a property on IFoo

}

这解决了您在问题中寻找的一切:

// ✔ Can only pass known property names: 'bar' | 'baz'
myFunction('bar');
myFunction('baz');

// ✔ Disallow unknown property names
// Error: '"test"' is not assignable to parameter of type '"bar" | "baz"'.
myFunction('test');

// ✔ Can refactor IFoo
// TypeScript will tell you if the string value is no longer valid
// and some IDEs will support renaming the strings when you rename the property :)

关于javascript - 有没有办法将 Prop 的名称作为字符串获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57560326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com