我有下面的 JavaScript 代码,并且我正在使用 TypeScript 编译器 (TSC) 根据 Typescript 文档 JSDoc 参考提供类型检查。
const assert = require('assert');
const mocha = require('mocha');
mocha.describe('Array', () => {
mocha.describe('#indexOf()', () => {
mocha.it('should return -1 when the value is not present',
/** */
() => {
assert.strictEqual([1, 2, 3].indexOf(4), -1);
});
});
});
我看到这个错误:
Assertions require every name in the call target to be declared with an explicit type annotation.ts(2775)
SomeFile.test.js(2, 7): 'assert' needs an explicit type annotation.
对于看到此内容的任何人,如果您编写了自己的断言函数,请记住 TypeScript 无法使用 arrowFunctions 进行断言。
参见https://github.com/microsoft/TypeScript/issues/34523
将断言函数从 arrowFunction 更改为 标准函数。
抱歉,没有深入讨论您使用的特定
assert
的主题,它似乎是原生节点,这与TypeScript支持的不同
但是,这可能是一个很好的提示:
// This is necessary to avoid the error: `Assertions require every name in the call target to be declared with an explicit type annotation.ts(2775)`
// `assertion.ts(16, 14): 'assert' needs an explicit type annotation.`
// https://github.com/microsoft/TypeScript/issues/36931#issuecomment-846131999
type Assert = (condition: unknown, message?: string) => asserts condition;
export const assert: Assert = (condition: unknown, msg?: string): asserts condition => {
if (!condition) {
throw new AssertionError(msg);
}
};
这就是你如何使用它:
assert(pathStr || pathParts, "Either `pathStr` or `pathParts` should be defined");