$refs!: { helloComponent: Hello }
https://github.com/vuejs/vue-class-component/blob/master/example/App.vue
August 6, 2020. TypeScript 3.7 added support for the ?? operator, which is known as the nullish coalescing operator. We can use this operator to provide a fallback value for a value that might be null or undefined .
The Angular safe navigation operator (?.) is a fluent and convenient way to guard against null and undefined values in property paths. Here it is, protecting against a view render failure if the currentHero is null.
What is the TypeScript exclamation mark? The non-null assertion operator tells the TypeScript compiler that a value typed as optional cannot be null or undefined . For example, if we define a variable as possibly a string or undefined, the !
This article opts to use the term type variables, coinciding with the official Typescript documentation. T stands for Type, and is commonly used as the first type variable name when defining generics. But in reality T can be replaced with any valid name.
There will be a scenario when TypeScript believes that certain property, variable will be null
or undefined
. But if you are sure that this variable cannot be null, then you can use this operator.
Consider the example:
let a = document.getElementById('hello'); if (a) { a.style.width = '100px'; }
TypeScript assumes that variable a
may be null since there is no guarantee for this element to exists. So before you can access that variable, you have put in if
guard. But if you know that your application is always going to have an HTML element with id #hello
, then you can rewrite above code as:
const a = document.getElementById('hello'); a!.style.width = '100px';
The above code is more readable and less verbose. Read more here at https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-0.html
EDIT: Technically correct comment by @Simon: Specifically, the operation x! produces a value of the type of x with null and undefined excluded.
That is a "definite assignment assertion": varname !: sometype
informs typescript not to worry about checking if varname
might be unassigned (it tells typescript that varname
will definitely be assigned, even if typescript cannot infer where it is assigned). Normally typescript will check if the variable may be unassigned, and gives errors.
For more information, see: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#definite-assignment-assertions
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With