javascript - 从 TypeScript 中的 lambda 表达式中检索属性名称

标签 javascript typescript

我想强类型属性名

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];
  //...
 }

Read on


如果您真的想像在 C# 中那样做类似的事情(不要!),只需这样做:

function myMethod(model: () => any) {
   const key = model.toString().split(".")[1];
   //...
}

关于javascript - 从 TypeScript 中的 lambda 表达式中检索属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50949905/

相关文章:

javascript - 使用反射,动态加载require模块

javascript - Highcharts 堆叠柱形 strip 线

javascript - Angular 2 页面大小

typescript - 如何在 Visual Studio CE 2019 中使用#region/#endregion for TypeScript 使区域折叠/扩展?

reactjs - 将扩展的 NextPage 类型分配给页面组件时出现类型错误

angular - 如何取消 ngxs 调度操作

javascript - 用python抓取javascript生成的html

javascript - 显示隐藏 <li> 元素

cordova - 添加滚动到顶部按钮(Ionic 2 | Typescript)

TypeScript:条件类型和使用 bool 参数来控制返回类型