ошибка TS2578: неиспользуемая директива «@ts-expect-error»

#typescript #ts-migrate

#typescript #ts-миграция

Вопрос:

На прошлой неделе я ts-migrate перенес нашу кодовую базу на TypeScript. Инструмент добавляет много // @ts-expect-error комментариев в TS-файлы, чтобы заставить их пройти проверку компилятора TS и проверку типов. Однако, когда я запускаю yarn run tsc , чтобы ввести проверку моей кодовой базы, я получаю более 5 тысяч ошибок, в которых указано error TS2578: Unused '@ts-expect-error' directive. , что я пропустил часть конфигурации, в которой указано, что эти типы ошибок допустимы? Ищу какие-либо советы, чтобы передать это компилятору TS.

Вот моя конфигурация TS для справки.

 {
    "compilerOptions": {
        "target": "ES2016",
        "module": "commonjs",
        "lib": ["esnext", "dom"],           
        "allowJs": true,                    
        "checkJs": false,                   
        "jsx": "react",                     
        "declaration": false,                  
        "declarationMap": false,               
        "sourceMap": false,                    
        "skipDefaultLibCheck": true,
        "skipLibCheck": true,
        "noEmit": true,                        
        "isolatedModules": true,               
        "strict": false, 
        "noImplicitAny": false,                 
        "strictNullChecks": false,              
        "strictFunctionTypes": false,           
        "strictBindCallApply": false,           
        "strictPropertyInitialization": false,  
        "noImplicitThis": false,                
        "alwaysStrict": false,                  
        "noUnusedLocals": false,                
        "noUnusedParameters": false,            
        "noImplicitReturns": false,             
        "noFallthroughCasesInSwitch": false,    
        "baseUrl": "./",                       
        "typeRoots": [
            "./types/",
            "./node_modules/@types"
        ], 
        "allowSyntheticDefaultImports": true,
        "esModuleInterop": true,
        "forceConsistentCasingInFileNames": true,
        "resolveJsonModule": true
    }
}
 

Полный пример сообщения об ошибке:

 src/WorkspacePicker/__tests__/index.test.tsx:27:1 - error TS2578: Unused '@ts-expect-error' directive.

27 // @ts-expect-error ts-migrate(2582) FIXME: Cannot find name 'describe'. Do you need to instal... Remove this comment to see the full error message
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

src/WorkspacePicker/__tests__/index.test.tsx:29:3 - error TS2578: Unused '@ts-expect-error' directive.

29   // @ts-expect-error ts-migrate(2582) FIXME: Cannot find name 'test'. Do you need to install ty... Remove this comment to see the full error message
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

src/WorkspacePicker/__tests__/index.test.tsx:38:5 - error TS2578: Unused '@ts-expect-error' directive.

38     // @ts-expect-error ts-migrate(2304) FIXME: Cannot find name 'expect'.
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

Ответ №1:

У меня была та же проблема, но моя ошибка также обнаружилась в этих нетестовых файлах. Я думаю, это связано с несоответствием версии typescript для ts-migrate и вашей IDE. Я исправил это, добавив пакет typescript package.json , чтобы сделать обе версии одинаковыми

Ответ №2:

У меня возникла та же проблема, пришлось перезапустить мою IDE (VS Code) после настройки конфигурации в tsconfig.json, а затем она приняла новые изменения.

Ответ №3:

Простой ответ. Вы использовали // @ts-expect-error where нет ошибки. Я рекомендую заменить ее в VS Code с помощью регулярного s*//s*@ts-expect-error выражения (ни на что), чтобы удалить все комментарии.

Комментарии:

1. Не уверен, что это так, потому что там есть сообщения об ошибках. Я обновлю вопрос примером.

2. Хорошо, я беру часть этого обратно. Тесты не нужно компилировать здесь, поэтому я понимаю, что вы говорите. Позвольте мне попробовать удалить все это из тестовых файлов.

3. Похоже, это правильно, но мне действительно нужны некоторые директивы @ts-expect-error. Хотелось бы, чтобы у VS Code был способ сообщить вам об этом и просто удалить их все, но я не думаю, что это возможно.