当前位置: 首页 > news >正文

【阮一峰】20.注释指令

注释指令

// @ts-nocheck

// @ts-nocheck 告诉编译器不对当前脚本进行类型检查,可以用于 TypeScript 脚本,也可以用于 JavaScript 脚本。

// @ts-nocheck
const element = document.getElementById(123);

// @ts-check

JavaScript 脚本顶部添加了// @ts-check ,即告诉编译器对该脚本进行类型检查,不论是否启用了 checkJs 编译选项。可以用于 TypeScript 脚本,也可以用于 JavaScript 脚本。

// @ts-check
let isChecked = true;
console.log(isChceked); // 报错

// @ts-ignore

// @ts-ignore 告诉编译器不对下一行代码进行类型检查,可以用于 TypeScript 脚本,也可以用于 JavaScript 脚本。

let x: number;

x = 0;

// @ts-ignore
x = false; // 不报错

// @ts-expect-error

// @ts-expect-error 主要用在测试用例,当下一行有类型错误时,它会压制 TypeScript 的报错信息(即不显示报错信息),把错误留给代码自己处理。

function doStuff(abc: string, xyz: string) {
  assert(typeof abc === "string");
  assert(typeof xyz === "string");
  // do some stuff
}

expect(() => {
  // @ts-expect-error
  doStuff(123, 456);
}).toThrow();

如果下一行没有类型错误,// @ts-expect-error则会显示一行提示。

// @ts-expect-error
console.log(1 + 1);
// 输出 Unused '@ts-expect-error' directive.

JSDoc

TypeScript 直接处理 JS 文件时,如果无法推断出类型,会使用 JS 脚本里面的 JSDoc 注释。

使用 JSDoc 时,有两个基本要求。

(1)JSDoc 注释必须以/**开始,其中星号(*)的数量必须为两个。若使用其他形式的多行注释,则 JSDoc 会忽略该条注释。

(2)JSDoc 注释必须与它描述的代码处于相邻的位置,并且注释在上,代码在下。

下面是 JSDoc 的一个简单例子。

/**
 * @param {string} somebody
 */
function sayHello(somebody) {
  console.log("Hello " + somebody);
}

上面示例中,注释里面的@param 是一个 JSDoc 声明,表示下面的函数 sayHello()的参数 somebody 类型为 string

TypeScript 编译器支持大部分的 JSDoc 声明,下面介绍其中的一些。

@typedef

@typedef 命令创建自定义类型,等同于 TypeScript 里面的类型别名。

/**
 * @typedef {(number | string)} NumberLike
 */

等同于 TypeScript 的如下语句。

type NumberLike = string | number;

@type

@type 命令定义变量的类型。

/**
 * @type {string}
 */
let a;

@type 命令中可以使用由@typedef 命令创建的类型。

/**
 * @type {NumberLike}
 */
let b = 0;

@type 命令中允许使用 TypeScript 类型及其语法。

/**@type {true | false} */
let a;

/** @type {number[]} */
let b;

/** @type {Array<number>} */
let c;

/** @type {{ readonly x: number, y?: string }} */
let d;

/** @type {(s: string, b: boolean) => number} */
let e;

@param

@param 命令用于定义函数参数的类型。

/**
 * @param {string}  x
 */
function foo(x) {}

如果是可选参数,需要将参数名放在方括号[]里面。

/**
 * @param {string}  [x]
 */
function foo(x) {}

方括号里面,还可以指定参数默认值。

/**
 * @param {string} [x="bar"]
 */
function foo(x) {}

@return@returns

@return@returns 命令的作用相同,指定函数返回值的类型。

/**
 * @return {boolean}
 */
function foo() {
  return true;
}

/**
 * @returns {number}
 */
function bar() {
  return 0;
}

@extends 和类型修饰符

@extends 命令用于定义继承的基类。

/**
 * @extends {Base}
 */
class Derived extends Base {}

@public@protected@private 分别指定类的公开成员、保护成员和私有成员。

@readonly 指定只读成员。

class Base {
  /**
   * @public
   * @readonly
   */
  x = 0;

  /**
   *  @protected
   */
  y = 0;
}

相关文章:

  • 禾迈电力电子嵌入式面经和参考答案
  • OpenCV计算摄影学(2)图像去噪函数denoise_TVL1()
  • 十类DeepSeek学术提示词分享
  • 代码异常(js中push)NO.4
  • Oracle 数据库基础入门(一):搭建数据管理基石
  • DeepSeek接入问题-Xshell5连接Ubuntu22失败解决方案
  • 网络安全复习资料
  • 音视频入门基础:RTP专题(12)——RTP中的NAL Unit Type简介
  • 基于MATLAB的OFDM通信系统仿真设计
  • 【NLP 27、文本分类任务 —— 传统机器学习算法】
  • QT 中的元对象系统(一):元对象和元数据
  • Android NFC功能开发指南
  • 深度求索DeepSeek:AI大模型的全域应用与技术突破
  • 8. 示例:对32位数据总线实现位宽和值域覆盖
  • BUG: 解决新版本SpringBoot3.4.3在创建项目时勾选lombok但无法使用的问题
  • 本地部署DeepSeek R1满血版大模型
  • deepseek 70b 部署需要的配置
  • Spring Boot电影评论网站系统设计与实现
  • 【redis】数据类型之hyperloglog
  • 了解模型压缩与加速
  • 郑州网站开发公司/老鬼seo
  • 开发论坛网站/站长工具樱花
  • 如何给网站续费/学大教育培训机构电话
  • 网页制作与网站建设江西/今日新闻热点10条
  • 焦作会计做继续教育在哪个网站/seo经典案例
  • 免费自己做网站手机软件/目前小说网站排名