本章解释了代码示例中使用的功能,但这些功能并非 TypeScript 本身的一部分。
本书中显示的代码示例通过单元测试自动测试。操作的预期结果通过以下来自 Node.js 模块 assert 的断言函数进行检查
assert.equal() 通过 === 测试相等性assert.deepEqual() 通过深度比较嵌套对象(包括数组)来测试相等性。assert.throws() 会报错。以下是使用这些断言的示例
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);第一行中的导入语句使用了 严格断言模式(使用 ===,而不是 ==)。在代码示例中通常会省略它。
您还将看到静态类型断言。
%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 发出警告。