【发布时间】:2018-06-20 13:51:44
【问题描述】:
我想强输入属性名称
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 中实现?
【问题讨论】:
-
为什么不直接把名字传进去?
-
代替
() => any,试试() => User和interface User { userId: number }。然后,当您执行model()时,您将获得一个用户。所以你可以直接做model().userId -
@JonasW。因为它不会提供属性名称的编译类型检查。把我的问题放在上下文中,这是为了模型验证,该方法向用户显示与模型属性关联的表单字段有错误。我已经将名称作为字符串传递,这就是我想要摆脱的事情,因为在重命名字段等时容易出错。
-
@Rajesh 方法事先不知道字段名,调用者必须提供字段名。
-
@sixstorm1 您可以以类型安全的方式执行此操作!看看我的回答吧。
标签: javascript typescript