Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does !: mean in Typescript?

$refs!: {     helloComponent: Hello } 

https://github.com/vuejs/vue-class-component/blob/master/example/App.vue

like image 765
Sinosaurus Avatar asked Jun 22 '18 08:06

Sinosaurus


People also ask

What is !: operator in TypeScript?

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 .

What does !: Means in angular?

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 '!' In TypeScript?

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 !

What does T means in TypeScript?

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.


2 Answers

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.

like image 131
Harshal Patil Avatar answered Sep 22 '22 17:09

Harshal Patil


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

like image 41
iislucas Avatar answered Sep 24 '22 17:09

iislucas