让前端飞

TypeScript——JavaScript文件类型检查(三)

2019-12-29  本文已影响0人  2o壹9

支持的JSDoc

下面的列表列出了当前所支持的JSDoc注解,你可以用它们在JavaScript文件里添加类型信息。

注意,没有在下面列出的标记(例如@async)都是还不支持的。

@type

@param (or @arg or @argument)

@returns (or @return)

@typedef

@callback

@template

@class (or @constructor)

@this

@extends (or @augments)

@enum

它们代表的意义与usejsdoc.org上面给出的通常是一致的或者是它的超集。 下面的代码描述了它们的区别并给出了一些示例。

@type

可以使用@type标记并引用一个类型名称(原始类型,TypeScript里声明的类型,或在JSDoc里@typedef标记指定的) 可以使用任何TypeScript类型和大多数JSDoc类型。

/**

* @type {string}

*/

var s;

/** @type {Window} */

var win;

/** @type {PromiseLike<string>} */

var promisedString;

// You can specify an HTML Element with DOM properties

/** @type {HTMLElement} */

var myElement = document.querySelector(selector);

element.dataset.myData = '';

@type可以指定联合类型—例如,string和boolean类型的联合。

/**

* @type {(string | boolean)}

*/

var sb;

注意,括号是可选的。

/**

* @type {string | boolean}

*/

var sb;

有多种方式来指定数组类型:

/** @type {number[]} */

var ns;

/** @type {Array.<number>} */

var nds;

/** @type {Array<number>} */

var nas;

还可以指定对象字面量类型。 例如,一个带有a(字符串)和b(数字)属性的对象,使用下面的语法:

/** @type {{ a: string, b: number }} */

var var9;

可以使用字符串和数字索引签名来指定map-like和array-like的对象,使用标准的JSDoc语法或者TypeScript语法。

/**

* A map-like object that maps arbitrary `string` properties to `number`s.

*

* @type {Object.<string, number>}

*/

var stringToNumber;

/** @type {Object.<number, object>} */

var arrayLike;

这两个类型与TypeScript里的{ [x: string]: number }和{ [x: number]: any }是等同的。编译器能识别出这两种语法。

可以使用TypeScript或Closure语法指定函数类型。

/** @type {function(string, boolean): number} Closure syntax */

var sbn;

/** @type {(s: string, b: boolean) => number} Typescript syntax */

var sbn2;

或者直接使用未指定的Function类型:

/** @type {Function} */

var fn7;

/** @type {function} */

var fn6;

Closure的其它类型也可以使用:

/**

* @type {*} - can be 'any' type

*/

var star;

/**

* @type {?} - unknown type (same as 'any')

*/

var question;

转换

TypeScript借鉴了Closure里的转换语法。 在括号表达式前面使用@type标记,可以将一种类型转换成另一种类型

/**

* @type {number | string}

*/

var numberOrString = Math.random() < 0.5 ? "hello" : 100;

var typeAssertedNumber = /** @type {number} */ (numberOrString)

上一篇下一篇

猜你喜欢

热点阅读