我想动态访问一个对象,比如 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 中不存在,它会引发编译错误。但我也不想说它是一个文本框问题:我希望以某种方式发现它。