我想强类型属性名
myMethod(model => model.userId);
public myMethod(model: () => any) {
//Must print "userId"
}
我已经知道这行不通,因为 JavaScript 会评估 userId。
在 C# 中很容易实现:
Get string property name from expression
Retrieving Property name from lambda expression
是否可以在 TypeScript/JavaScript 中实现?
最佳答案
与 C# 不同,在 JavaScript 中可以通过名称动态访问属性(因此也可以通过 Typescript),因此您可以将名称作为字符串传递给函数并使用括号表示法来访问属性:
myMethod(model, "userId")
现在关于 typescript 的一个很酷的事情是这个字符串实际上可以是类型安全的:
function myMethod<T, K extends keyof T>(model: T, key: K) {
const value = model[key];
//...
}
如果您真的想像在 C# 中那样做类似的事情(不要!),只需这样做:
function myMethod(model: () => any) {
const key = model.toString().split(".")[1];
//...
}
关于javascript - 从 TypeScript 中的 lambda 表达式中检索属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50949905/