Skip to content

Annotating Types

Laura Harker edited this page Mar 5, 2019 · 12 revisions

Annotating declarations and casts

The compiler recognizes @type and function declarations (@param, @return, etc) annotations in two contexts: declarations and casts.

Variable and functions can be declared with either traditional declarations, or inline declarations, which are more concise.

For more information about specific types that can be used in @type annotations see: Types in the Closure Type System

Examples

Function declarations

/** @type {function(number):string} */
function f(x) {return x + ' apples'}

or the more concise inline function declaration:

function /** string */ f(/** number */ x) {return x + ' apples'}

Variable declarations

/** @type {string} */
let x = 'fruit';

or the more concise inline var declaration:

let /** string */ x = 'fruit';

Variables declared through destructuring can only be typed with an inline var declaration:

const {/** string */ x, /** number */ y} = obj;

Property declarations

/** @type {string} */
x.prop = 'fruit';

or

let x = {
  /** @type {string} */
  prop : 'fruit'
};

Catch declarations

try { 
  ... 
} catch (/** @type {string} */ e) {
  ...
}

Type Casts

Type cast precede a parenthesized expression.

let x = /** @type {string} */ (fruit);
Clone this wiki locally