Vue 属性装饰器上的感叹号代表什么

Pet*_*ran 5 typescript vue.js

熟悉了 vue 中 typescript 的使用。在阅读 vue 属性装饰器的文档时,我无法理解此声明代表什么

@Prop({ default: 'default value' }) readonly propB!: string
Run Code Online (Sandbox Code Playgroud)

pas*_*etz 9

在这种特定情况下,使用 bang 运算符是因为您知道您的属性propB不能是,null或者undefined因为装饰器负责填充值。TypeScript 不知道这一点,并且由于您没有直接或在构造函数中分配值,因此它期望类型签名为string | undefined. 感叹号告诉 TypeScript 你知道这个值永远不会是undefined,并将签名减少到stringonly 而不抱怨它的可能性undefined。

如果您将 TypeScript 编译器选项设置为strict(强烈建议这样做!),则仅需要此选项。