js 'type' можна використовувати лише у файлі .ts - Visual Studio Code за допомогою @ ts-check


104

Я починаю використовувати TypeScript в проекті Node, над яким працюю в коді Visual Studio. Я хотів дотримуватися стратегії "відмови", подібної до Flow. Тому я розміщую // @ts-checkвгорі свого .jsфайлу з надією включити TS для цього файлу. Зрештою, я хочу той же досвід "зв'язування", що і Flow, тому я встановив плагін TSLint, щоб я міг бачити попередження / помилки Intellisense.

Але мій файл виглядає так:

// @ts-check

module.exports = {
  someMethod: (param: string): string => {
    return param;
  },
};

і мій tsconfig.jsonфайл виглядає як ...

{
  "compilerOptions": {
      "target": "es2016",
      "module": "commonjs",
      "allowJs": true
  }
}

Я отримую цю помилку: [js] 'types' can only be used in a .ts file.як показано нижче на зображенні.

помилка vscode для ц

Я побачив це запитання, яке рекомендувало вимкнути перевірку JavaScript у vscode, але тоді це не показує мені ніякої інформації про TypeScript Intellisense.

Я спробував встановити , tslint.jsEnableщоб trueв моїх настройках vscode , як зазначено в документації розширення TSLint , але не пощастило там.

Яка правильна настройка для використання .jsфайлів з TypeScript та отримання Intellisense, щоб я знав, які помилки в моєму коді, перш ніж запускати будь-які команди TS?


Чи є у вас помилка, якщо ви зміните розширення на ts?
Ізраїль Цинк

@ israel.zinc змінює розширення, щоб .tsпоказати мені помилки / попередження TS, як очікувалося. Я думаю, це могло б спрацювати, але я сподівався на більшу кількість методів відмови, @ts-checkзберігаючи всі мої розширення як.js
Джеймс


@ BuZZ-dEE це може бути, але відповіді там не вирішили питання. Про це я згадував у своєму первісному запитанні.
Джеймс

Відповіді:


204

Я використовую @flow з vscode, але була така ж проблема.

Я вирішив це за допомогою цих кроків:

  1. встановити розширення Support Language Flow
  2. вимкнути вбудоване розширення TypeScript:

Як відключити вбудований TypeScript:

  1. перейти на вкладку розширень
  2. пошук функцій @builtin TypeScript та JavaScript
  3. натисніть кнопку Вимкнути

5
Прийнята відповідь не завжди є правильною. У VSCode є помилка з React Native and Flow, яка передає те саме повідомлення у файлах .js, і в такому випадку ВИ ВАМОЖЕ НЕ змінити на .ts, а продовжити з .js та виправити проблему, як тут запропоновано !!
пашуте

105
Просто FYI: відключення цього розширення в основному зводить нанівець всі хороші речі щодо розробки JS за допомогою VSCode. Натомість слід просто додати у файл json налаштування наступне: "javascript.validate.enable": false
heez

1
Як згадував @heez, це вплине на те, що пошук посилань на файли javascript, автоматичне завершення тощо не відключать функції мови Javascript.
Аджіцен

2
Правильну відповідь сказав @heez
Асім

1
@heez спасибі за економію, я дізнався. Зараз помилок немає. Можна нарешті використовувати код Visual Studio.
Аніш Ар’я

94

Використовуйте "javascript.validate.enable": falseу своїх настройках коду VS, це не відключає ESLINT. Я використовую ESLINT та Flow. Просто дотримуйтесь вказівок налаштування коду проти Vs

Додавання цього рядка в settings.json. Допомагає "javascript.validate.enable": false


4
З цим вам не доведеться відключати typecript. Обидва можуть існувати. Найкраще рішення!
Нірус

2
Якщо ви використовуєте ESLint для перевірки Javascript, то ця відповідь є найкращим рішенням. Більше інформації: code.visualstudio.com/docs/languages/… а також github.com/flowtype/flow-for-vscode#setup
Beau Smith

1
Де я можу знайти файл settings.json.?
i18n

1
Привіт @ i18n Перейдіть до: Код -> Налаштування -> Налаштування -> Розширення -> Прокрутіть униз і знайдіть "Редагувати в налаштуваннях.json". На самом деле знайти один під цим: Include Languages Enable Emmet abbreviations in languages that are not supported by default. Add a mapping here between the language and emmet supported language. E.g.: {"vue-html": "html", "javascript": "javascriptreact"}натисніть на Edit в settings.json і додати: "javascript.validate.enable": false.
Фотіс Цакіріс,

найкраще .. добре працює для мене
Бетіні О. Хелено

1

Ви повинні використовувати .tsфайл - наприклад, test.tsщоб отримати перевірку Typescript, інтелігенцію typing vars, типи повернення, а також перевірку помилок "набрали" (наприклад, передача stringa методу, який очікує, що numberпарам помилиться).

Це буде перетворено на (стандартне) .js черезtsc .


Оновлення (11/2018):

Необхідне уточнення, засноване на голосуваннях, дуже корисних коментарях та інших відповідях.

types

  • Так, ви можете typeперевірити код VS у .jsфайлах з @ts-check- як показано в анімації

  • Те, що я спочатку мав на увазі для Typescript, types - це щось подібне, в .tsякому не зовсім те саме:

    hello-world.ts

    function hello(str: string): string {
      return 1;
    }
    
    function foo(str:string):void{
       console.log(str);
    }

    Це не складеться. Error: Type "1" is not assignable to String

  • якщо ви спробували цей синтаксис у файлі Javascript hello-world.js :

    //@ts-check
    
    function hello(str: string): string {
      return 1;
    }
    
    function foo(str:string):void{
       console.log(str);
    }

    Показано повідомлення про помилку, на яке посилається ОП: [js] 'types' can only be used in a .ts file

Якщо я пропустив щось, що охоплює це, а також контекст ОП, будь ласка, додайте. Давайте всі дізнаємось.


Я знайшов кілька статей, які пропонують вам використовувати всі функції TS у файлі JS. Ось один із журналу Smashing Magazine , випуск GitHub для vscode, який описує налаштування, та деякі примітки до випуску vscode
Джеймс

@ Jamez14 я не пробував / було необхідності НЕ використовувати .ts. IINM, зразки показують перевірку помилок та інтелігенцію . Проблема у вас є (статичний) typeІНГ змінні, і повернення , typesа також - наприклад foo:string, bar:number, fubar:MyClass, myMethod(f:Array):void, anotherMethod():string. Hth ...
EdSF

так, схоже, ти маєш рацію зі своєю оцінкою. Подивившись більше на приклади, я бачу, що це просто перевірка помилок JS, а не TS при використанні @ts-checkатрибута. Дуже вводить в оману ...
Джеймс

-1

Для всіх, хто приземлився тут, і всі інші рішення не спрацювали, спробуйте це. Я використовую typecript + react, і моя проблема полягала в тому, що я асоціював файли в vscode, оскільки javascriptreactне typescriptreactтак перевіряв ваші налаштування щодо наступних записів.

   "files.associations": {
    "*.tsx": "typescriptreact",
    "*.ts": "typescriptreact"
  },
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.