获取对象类型中的属性或字段的名称

时间:2018-02-26 16:09:16

标签: typescript

我有一个带有readonly属性的可注入角度类。所以我不控制这个类的初始化。该类应该在库中使用。此库的消费者可以访问这些属性,但不允许他们修改这些属性。

@Injectable()
export class MyState {
   readonly requestToken: string;
}

库通过技巧写入属性。

self.state[<any>"requestToken"] = requestToken;

问题是,如果属性名称发生更改,则ts编译将不会检测到字符串分配。

有没有办法以打字方式获取属性的名称。 例如:

var nameOfRequestTokenProperty = somethingXxx MyState => requestToken;

1 个答案:

答案 0 :(得分:2)

您无法从编译器获取属性的名称,但是您可以确保如果名称发生更改,您将会使用keyof收到错误:

const requestTokenName: keyof MyState = "requestToken"; // if requestToken is renamed it will cause an error here.
self.state[<any>requestTokenName] = requestToken;