首页 > 解决方案 > MikroORM Typescript 对象中使用的 `!` 运算符是什么?

问题描述

!在 JS 对象的键声明中,冒号前的语法是什么?

类的 MikroORM 语法

@Entity()
export class Post {
  // the @PrimaryKey invokes a function that takes the returned key/value pair and adds it as a column / information
  @PrimaryKey()
  id!: number;

  @Property({ type: "date", default: "NOW()" })
  createdAt = new Date();

  @Property({ type: "date", default: "NOW()", onUpdate: () => new Date() })
  updatedAt = new Date();

  @Property({ type: "text" })
  title!: string;
}

标签: typescriptmikro-orm

解决方案


JavaScript中,这是一个语法错误,但您显示的代码是TypeScript代码。TypeScript 是添加类型信息的 JavaScript 的超集。在 TypeScript 中,text!: string类型定义是这样说的:

  • 有一个东西叫做调用text(在这种情况下,我希望它是一个变量,而不是一个对象属性)。
  • 它的类型是string.
  • 即使从上下文中看不出这是真的,它也肯定是指定的。

编辑:现在您已经显示了完整的class定义,这就是Post该类具有的内容:

  • 一个idtype 的属性,number即使class构造中的代码没有显示初始化,也肯定是分配/初始化的。

  • createdAt用 初始化的属性new Date()(这将使 TypeScript 推断其类型为Date

  • 一个updatedAt属性也用new Date()

  • 即使代码中没有显示该初始化,也肯定会初始化类型为的title属性string,例如。idclass

  • 它使用与您的 ORM 相关的各种装饰器,例如@PrimaryKey,将这些属性连接到模型并说明 ORM 应该如何处理它们。

这些明确的赋值/初始化断言在使用 ORM 的类代码中并不少见。


推荐阅读