ts属性后面的感叹号有什么用处?
首先看一段代码
import { Vue, Component, Prop } from 'vue-property-decorator'
@Component
export default class YourComponent extends Vue {
@Prop(Number) propA!: number
@Prop({ default: 'default value' }) propB!: string
@Prop([String, Boolean]) propC: string | boolean
}
这是vue组件的ts写法,仔细观察,里面有一段这样的代码@Prop(Number) propA!: number
,这是什么鬼?
查了一下ts的文档说明,原来感叹号是非null
和非undefined
的类型断言,所以上面的写法就是对propA
这个属性进行非空断言。文档的相关说明在这里。
官方文档上的一个例子很好的说明了这个问题
interface Entity {
name: string
}
// Compiled with --strictNullChecks
function validateEntity(e?: Entity) {
// Throw exception if e is null or invalid entity
}
function processEntity(e?: Entity) {
validateEntity(e);
let s = e!.name; // Assert that e is non-null and access name
}
如果直接使用let s = e.name;
,编译器会抛出e
可能不存在的错误,但是使用非空断言,则表示e
肯定是存在的,从而不会产生编译问题。
如果您觉得本文对您有用,欢迎捐赠或留言~
- 本博客所有文章除特别声明外,均可转载和分享,转载请注明出处!
- 本文地址:https://www.leevii.com/?p=1543
https://secure.gravatar.com/avatar/?s=56&d=wavatar&r=g