TypeScript基础入门之Javascript文件类型检查(三)
栏目: JavaScript · 发布时间: 7年前
内容简介:继续上篇文章【下面的列表概述了使用JSDoc注释在JavaScript文件中提供类型信息时当前支持的构造。请注意,尚不支持下面未明确列出的任何标记(例如
继续上篇文章【 TypeScript基础入门之Javascript文件类型检查(二) 】
支持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 “标记并引用类型名称(原语,在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可以指定联合类型 - 例如,某些东西可以是字符串或布尔值。
/**
* @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;
您可以使用标准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;
或者您可以使用未指定的函数类型:
/** @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)
导入类型
您还可以使用导入类型从其他文件导入声明。此语法是特定于Typescript的,与JSDoc标准不同:
/**
* @param p { import("./a").Pet }
*/
function walk(p) {
console.log(`Walking ${p.name}...`);
}
导入类型也可以在类型别名声明中使用:
/**
* @typedef Pet { import("./a").Pet }
*/
/**
* @type {Pet}
*/
var myPet;
myPet.name;
如果你不知道类型,或者它有一个令人讨厌的大型类型,可以使用import类型从模块中获取值的类型:
/**
* @type {typeof import("./a").x }
*/
var x = require("./a").x;
未完待续…
以上所述就是小编给大家介绍的《TypeScript基础入门之Javascript文件类型检查(三)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- TypeScript基础入门之Javascript文件类型检查(一)
- TypeScript基础入门之Javascript文件类型检查(二)
- TypeScript基础入门之Javascript文件类型检查(四)
- TypeScript基础入门之Javascript文件类型检查(五)
- elasticsearch学习笔记(五)——快速入门案例实战电商网站商品管理:集群健康检查,文档的CRUD
- k8s与健康检查--grpc服务健康检查最佳实践
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Release It!
Michael T. Nygard / Pragmatic Bookshelf / 2007-03-30 / USD 34.95
“Feature complete” is not the same as “production ready.” Whether it’s in Java, .NET, or Ruby on Rails, getting your application ready to ship is only half the battle. Did you design your system to......一起来看看 《Release It!》 这本书的介绍吧!