有没有办法在 TypeScript 类定义中转义和使用保留字?
Posted
技术标签:
【中文标题】有没有办法在 TypeScript 类定义中转义和使用保留字?【英文标题】:Is there a way to escape and use reserved words in TypeScript class definitions? 【发布时间】:2017-08-24 18:21:03 【问题描述】:这是我想做的一个简单示例:
export class UserInfoPrivate
constructor(
public repEmail: string,
public repPhone: string,
public agreedToTnC: boolean
)
export class UserInfo
constructor(
public $uid: string,
public orgApproved: false,
public private: UserInfoPrivate, // <-- private is a reserved word
public open: UserInfoOpen,
)
由于数据库是 NoSQL (Firebase) 并返回简单的 JSON 结构化对象,并且我在名为“private”的用户下有一个节点,我想直接将我的类映射到它而不需要额外的解析。有没有办法在类定义中使用诸如“private”之类的保留字,还是我必须去更改节点?
到目前为止,我的研究似乎表明没有,但我很难接受这是不可能的。
【问题讨论】:
【参考方案1】:您始终可以将属性名称(在类或对象文字中)放在引号中 - 对于那些不是有效标识符名称的名称,您需要这样做。然后,您可以使用bracket notation 访问它们。
export class UserInfo
public "private": UserInfoPrivate
constructor(
public $uid: string,
public orgApproved: false,
privateParam: UserInfoPrivate,
public open: UserInfoOpen,
)
this.private = privateParam;
(我希望这不仅在我眼中而且在编译器看来都是有效的 Typescript)
【讨论】:
...只是不是 OP 想要的,在构造函数参数列表中(TypeScript 部分的奇怪遗漏)。另请注意,虽然您可以执行this["private"] = privateParam;
,但您不必这样做; this.private = privateParam;
完全有效,并且自 ES5(2009 年 12 月)以来一直有效。
@T.J.Crowder 啊,对。我不必要地概括为根本没有标识符名称的字符串(例如包含空格)。确实,private
是一个有效的名称但不是一个有效的标识符,所以我们只能将它用作变量(或参数)名称。
@Bergi 您可以使用:public private: UserInfoPrivate
。仅当您尝试使用 inline 与您的构造函数时,它才会失败。尝试从您的代码中删除"
,它仍然可以工作。
@Diullei 是的,我把它留在这里是为了说明您可以在需要时使用引号
感谢您的宝贵时间,但看起来您错过了关键问题。当我的对象来自数据库时,它有一个名为“private”的节点,如果我在同名的构造函数中创建一个属性,我可以抓住整个东西并将其用作类并获得丰富的智能感知等。 .. 目前我的解决方案是将“私有”节点更改为“关闭”,现在一切正常,但需要大量重构和手动数据库更新。以上是关于有没有办法在 TypeScript 类定义中转义和使用保留字?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在声明 angular2 数据模型时在 typescript 中引用数据类型
有没有办法通过 tslint 规则在 Typescript 类上强制执行方法返回类型?