#javascript #typescript #mocha.js #jsdoc #tsc
#javascript #typescript #mocha.js #jsdoc #tsc
Вопрос:
У меня есть приведенный ниже код JavaScript, и я использую компилятор TypeScript (TSC) для обеспечения проверки типов в соответствии со ссылкой Typescript Docs 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.
Как я могу устранить эту ошибку?
Ответ №1:
Для тех, кто видит это, если вы написали свою собственную функцию assert, имейте в виду, что TypeScript не может использовать arrowFunctions для утверждений.
См . https://github.com/microsoft/TypeScript/issues/34523
Исправление: измените свой код с ArrowFunction на стандартную функцию.
Комментарии:
1. Именно моя проблема. Спасибо!
Ответ №2:
Извините, что не углубляюсь в тему конкретного 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");