2

我想动态访问一个对象,比如 object[variableName] 而不是 object["actual name of variable"]。

好的。假设我有一个看起来像这样的对象:

export class Object {
  "key": string;
  "name": string;
  "address": string;
}

我想用它的属性动态访问这个对象。我需要在对象中获取特定名称的字符串,例如“key”/“name”或“address”。我不想用 typeof Object 来获取它们,而不是我想要的。

我正在寻找一种动态方式来访问这些密钥,如下所示:

export function (item: Object, key: string): keyof Object | string{

}

然后访问 objects 变量,如下所示:

const object: Object;
const variableName = getVariableName(object, object.test); // i want it to return "test". 

object[variableName] = null;

我不想像 object["test"] 那样访问它。因为它必须是动态的。

我知道如何为一个简单的变量而不是一个对象执行此操作:

let myVar = 'something';
let nameObject = {myVar};
let getVarNameFromObject = (nameObject) => {
  for(let varName in nameObject) {
    return varName;
  }
}
let varName = getVarNameFromObject(nameObject);

但这仅适用于 {myVar} 不适用于 {object.test}

帮帮我 :)

我在方法中尝试了不同的 keyof typeof,但我无法弄清楚。

更新

这就是我发现的,虽然我对这个解决方案不是很满意:



const key = getKey<TextboxQuestion>(({key}) => null);

export var getKey = <T>(fn: (object: T) => null): string => fn.toString().match(/{([^;]*)}/)[1].replace(' ', '');

为什么这种工作是因为 key 它承诺 key 存在于 Textboxquestion 中并且它确实存在,如果我写的东西在 textboxquestion 中不存在,它会引发编译错误。但我也不想说它是一个文本框问题:我希望以某种方式发现它。

4

0 回答 0