Как разрешить «Утверждения требуют, чтобы каждое имя в цели вызова было объявлено с явным типом annotation.ts (2775)»?

#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");