深入理解 TypeScript
请支持本书:购买捐赠
(广告,请不要屏蔽。)

6 本书使用的符号



本章解释了代码示例中使用的功能,但这些功能并非 TypeScript 本身的一部分。

6.1 测试断言(动态)

本书中显示的代码示例通过单元测试自动测试。操作的预期结果通过以下来自 Node.js 模块 assert 的断言函数进行检查

以下是使用这些断言的示例

import {strict as assert} from 'assert';

assert.equal(3 + ' apples', '3 apples');

assert.deepEqual(
  [...['a', 'b'], ...['c', 'd']],
  ['a', 'b', 'c', 'd']);

assert.throws(
  () => eval('null.myProperty'),
  TypeError);

第一行中的导入语句使用了 严格断言模式(使用 ===,而不是 ==)。在代码示例中通常会省略它。

6.2 类型断言(静态)

您还将看到静态类型断言。

%inferred-type 只是普通 TypeScript 中的注释,用于描述 TypeScript 为下一行推断的类型

// %inferred-type: number
let num = 123;

@ts-expect-error 会抑制 TypeScript 中的静态错误。在本书中,始终会提及被抑制的错误。这在普通的 TypeScript 中既不是必需的,也不会产生任何影响。

assert.throws(
  // @ts-expect-error: Object is possibly 'null'. (2531)
  () => null.myProperty,
  TypeError);

请注意,我们之前需要 eval() 才能避免 TypeScript 发出警告。