typescript - 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;
}
解决方案
在JavaScript中,这是一个语法错误,但您显示的代码是TypeScript代码。TypeScript 是添加类型信息的 JavaScript 的超集。在 TypeScript 中,text!: string
类型定义是这样说的:
- 有一个东西叫做调用
text
(在这种情况下,我希望它是一个变量,而不是一个对象属性)。 - 它的类型是
string
. - 即使从上下文中看不出这是真的,它也肯定是指定的。
编辑:现在您已经显示了完整的class
定义,这就是Post
该类具有的内容:
一个
id
type 的属性,number
即使class
构造中的代码没有显示初始化,也肯定是分配/初始化的。createdAt
用 初始化的属性new Date()
(这将使 TypeScript 推断其类型为Date
)一个
updatedAt
属性也用new Date()
即使代码中没有显示该初始化,也肯定会初始化类型为的
title
属性string
,例如。id
class
它使用与您的 ORM 相关的各种装饰器,例如
@PrimaryKey
,将这些属性连接到模型并说明 ORM 应该如何处理它们。
这些明确的赋值/初始化断言在使用 ORM 的类代码中并不少见。
推荐阅读
- azure-log-analytics - Azure 日志分析 > 固定在仪表板上时查询相同但结果不同
- python - Tensorflow 未安装,软件包与哈希文件不匹配
- javascript - 在 hideURLbar 上编写代码的正确方法或正确的“事件”是什么
- docker - 如何在 docker 上绑定已安装的持久卷?我正在尝试在 docker 上运行 Sonarqube
- python - 在 Python 中过滤具有特定要求的数据框
- android - 为什么我无法从 Firestore DocumentSnapshot 中获取 Int 类型?
- react-native - 运行 expo start 后的错误
- json - 当结构已知但不知道键时反序列化 JSON
- javascript - 从依赖项 package.json 运行 npm bin 脚本
- c - 如果有人在没有写任何东西的情况下进入,那么它应该终止