对象属性的Javascript名称

Lin*_*not 1 javascript typescript

在 C# 中,可以将对象属性的名称作为字符串值获取。

nameof(object.myProperty) --> "myProprty"

这可以在 Javascript/Typescript 中完成吗?

Object.Keys() 是我唯一找到的东西,但它给了我所有的钥匙。

例如我想要实现的目标:

export interface myObject {
     myProperty: string;
}

console.log(myObject["myProperty"]); 
Run Code Online (Sandbox Code Playgroud)

假设我出于某种原因将界面更改为:

export interface myObject {
     myPropertyOther: string;
}

console.log(myObject["myProperty"]); // This will not give an error on build
Run Code Online (Sandbox Code Playgroud)

所以我想要这样的东西:

console.log(myObject[nameOf(myObject.myProperty)]
// This will give an error on build when the interface is changed
Run Code Online (Sandbox Code Playgroud)

Tit*_*mir 5

nameofJavascript/Typescript 中没有运算符。您可以创建一个函数,该函数采用另一个对象的键,并由打字稿编译器检查:

function keyOf<T>(o: T, k: keyof T) {
    return k
}

let o = { a: 1 }
keyOf(o, 'a'); //ok
keyOf(o, 'b'); //err
Run Code Online (Sandbox Code Playgroud)