Автоматичний імпорт коду Visual Studio


83

Я переходжу від Webstorm до Visual Studio Code. Виступ у Webstorm є жахливим.

Код Visual Studio не надто допомагає знайти залежності, які мені потрібні, та імпортувати їх. До цього часу я робив це вручну, але, чесно кажучи, я волів би зачекати 15 секунд, поки webstorm знайде та додасть мій імпорт, який для цього потрібно копати вручну.

Знімок екрана: не вдається знайти імпорт

Я використовую насіння angular2 від @ minko-gechev https://github.com/mgechev/angular2-seed

У моєму baseDir є tsconfig.json, який виглядає так:

    {
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "declaration": false,
    "removeComments": true,
    "noLib": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "sourceMap": true,
    "pretty": true,
    "allowUnreachableCode": false,
    "allowUnusedLabels": false,
    "noImplicitAny": true,
    "noImplicitReturns": true,
    "noImplicitUseStrict": false,
    "noFallthroughCasesInSwitch": true
  },
  "exclude": [
    "node_modules",
    "dist",
    "typings/index.d.ts",
    "typings/modules",
    "src"
  ],
  "compileOnSave": false
}

і в моєму каталозі src / client є ще один, який виглядає так:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false,
    "allowSyntheticDefaultImports": true
  }
}

Не знаю, чому їх два. Проект насіння angualr використовує завдання збірки ковтка машинопису, тому я думаю, компіляція відрізняється.

Що я можу зробити, щоб vscode був більш корисним ??


Дайте alm.tools ходу 🌹
басарат

:-) переживаю те саме на даний момент. Ви знайшли рішення?
Rico Leuthold

Так - я дізнався, що ВСЕ додано за допомогою розширень. Спробуйте "автоматичне імпортування" "допомога при імпорті машинопису" "tsd-рекомендатель" "npm intellisense"
reach4thelasers

Я спробував розширення "авто імпорту", і воно як би зависає, вказуючи, що воно "сканує". Я працюю в Windows 10. У когось така сама проблема?
Sang Shin

@ dose4thelasers привіт, я теж перебуваю в тій же позиції, що і ти намагався знайти розширення і т.д. PipeTransform не дає мені можливості автоматично імпортувати його, натомість я отримую повідомлення про помилку, яке ви відображаєте на своїй фотографії ... чи вдалося це вирішити?
Code Ratchet

Відповіді:


45

2018 рік. Вам не потрібні ніякі розширення для авто-імпорту в Javascript ( до тих пір , поки у вас є checkjs: trueу вашому jsconfig.jsonфайлі) та машинопис.

Існує два типи автоматичного імпорту: додавання відсутнього імпорту швидке виправлення яке відображається як лампочка щодо помилок:

введіть тут опис зображення

І автоматичного імпорту . Вони відображають елементи пропозицій під час введення тексту. Прийняття пропозиції автоматичного імпорту автоматично додає імпорт у верхню частину файлу

введіть тут опис зображення

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


2
Так, автоматичний імпорт чудово працює на Mac незалежно від того, чи версія вашого проекту typecript відповідає тому, що постачається з VScode, але в інших ОС, а саме Linux, це не так, і ви повинні вказати на версію робочої області TS, як я пояснив у своїй відповіді.
inorganik

3
Це неправильно. Якщо те, що я описав вище, не працює, це помилка, і ви повинні подати звіт про помилку. Я підтримую підтримку JS / TS VS Code та впроваджую ці функції
Метт Бірнер,

4
чи є для цього якісь гарячі клавіші? Я не хочу клацати лампочкою щоразу, коли хочу щось імпортувати cmd+.на Mac
buncis

1
@Tonio cmd+.на Mac
buncis

1
@MattBierner це також має імпортувати компоненти Angular? Судячи зі скріншоту, мабуть, саме це означало OP.
Dev

43

Я отримав це, встановивши різні плагіни нижче.

Здебільшого речі просто імпортуються самі по собі, як тільки я вводжу назву класу. Крім того, з’являється лампочка, на яку ви можете натиснути. Або ви можете натиснути F1і набрати "імпортувати ...", і там також є різні варіанти. Я якось використовую їх усі. Також F1реалізація для реалізації інтерфейсу корисна, але не завжди працює.

Список плагінів

Знімок екрана розширень

скріншот розширень
* клацніть для повного дозволу


вам доводилося змінювати будь-які конфігураційні файли? чи це була проста установка та увімкнення?
Code Ratchet

1
Ні, я не думаю, що будь-які модифікації конфігурації потрібні. Єдине, що в моєму settings.json - це "typescript.tsdk": "node_modules / typecript / lib /", що змушує vscode використовувати версію typecript в node_modules, а не ту, яка встановлена ​​в системі.
reach4thelasers

1
FYI, моя версія машинопису з
Package.json

Чи можете ви надати вам плагіни у вигляді списку, оскільки ваше вкладене зображення вже не видно?
водянистий

1
TypeScript Importerпрацює добре, а також зі звичаєм rootDirsабо відображень з використанням pathsв tsconfig.json. Він виправляє зламаний автоімпорт VS Code.
Лев

20

Я використовував плагін Auto Import від steoates, що досить просто.

Автоматично знаходить, аналізує та забезпечує дії коду та заповнення коду для всіх доступних імпортів. Працює з Typescript та TSX.


Я можу підтвердити, що цей плагін працює добре. Це навіть ігнорує моє index.ts. За замовчуванням код VS хоче імпортувати з мого index.tsфайлу. Чудова відповідь!
Ерік

На жаль, мені це не допомогло, я все ще не можу автоматично імпортувати модулі в node_modules:(
Павло,

Додавання цього розширення спрацювало у мене. Він правильно автоматично імпортував файл EventEmitterіз @angular/core( оскільки він був підкреслений для швидкого виправлення ). Без цього розширення він імпортував EventEmitterз protractor( що було не те, що я хотів ). У мене є запитання до супровідника MS VSCode @MattBierner тут щодо іншого джерела імпорту.
Chris22

Підтримка автоматичного імпорту TypeScript!
Konrad G

15

У tsconfig.app.json стандартна програма Angular 10 містить:

{
  "extends": "./tsconfig.base.json",
  "compilerOptions": {
    "outDir": "./out-tsc/app",
    "types": []
  },
  "files": [
    "src/main.ts",
    "src/polyfills.ts"
  ],
  "include": [
    "src/**/*.d.ts"
  ]
}

Після того, як я змінив включення, подобається бути:

  "include": [
    "src/**/*.d.ts",
    "src/**/*.ts"
  ]

У мене це спрацювало У мене це спрацювало


1
Велике спасибі, ваше рішення справді працює. Проблема полягала в налаштуваннях tsconfig, як виявилося, але не в IDE.
аме

1
Мені було б краще додати своє рішення в tsconfig.editor.json)) Після того, як я вніс зміни в tsconfig.app.jsonпрограму збірки програм було порушено)
ame

9

Якщо хтось зіткнувся з цією проблемою нещодавно, я виявив, що мені довелося додати налаштування, щоб використовувати версію TypeScript для мого робочого простору для роботи автоматичного імпорту. Для цього додайте цей рядок до налаштувань робочої області :

{
  "typescript.tsdk": "./node_modules/typescript/lib"
}

Потім, відкривши файл vscript у vscode, клацніть на версії машинопису в нижньому правому куті. Коли з’являться опції вгорі, виберіть «використовувати версію робочої області», а потім перезавантажте vscode .

Тепер автоімпорт повинен запрацювати.


1
Це не потрібно. Автоматичне імпортування працює за допомогою
пакетної

1
@MattBierner у моєму випадку це було необхідно, оскільки я використовував VScode на Linux (CentOS). Автоматичне імпортування не працювало, поки я не вказав на встановлення Typescript у робочій області, яка була трохи старша за те, що поставляється з VScode
inorganik

Це не є гарною порадою майже у всіх випадках. Якщо ви не бачите автоматичного імпортування, що працює з пакетною версією typecript, подайте
Метт Бірнер,

2
@MattBierner в контексті веб-сайту з питань та відповідей - це гарна порада. Коли автоматичний імпорт не працює, знання, що це помилка, не вирішує їх проблеми. Ми не хочемо чекати виправлення помилки для цього випадку, і я не збираюся подавати чергову помилку в репо, що має десятки тисяч проблем. Нарешті, я хотів би лише зазначити, що це порада, яка прописана на веб-сайті VScode
inorganik

2
Отже, коли автоматичний імпорт НЕ працює, і я використовую купу розширень, як мені дізнатися, як подати звіт про помилку за допомогою коду VS замість одного з розширень?
Ендрю Костер

1

VS Code зараз це підтримує нестандартно, але, здається, ця функція іноді працює, а іноді ні. Наскільки я міг з'ясувати, VS Code повинен завантажувати дані, необхідні для автоматичного імпорту, що відбувається більш-менш так:

  • Завантажте дані для всього експорту з локальних файлів
  • Завантажте дані для всього експорту з типів node_modules / @
  • Завантажте дані для всього експорту з node_modules / {packageName}, лише якщо будь-який із ваших локальних файлів їх імпортує

Це краще описано в цьому коментарі: https://github.com/microsoft/TypeScript/issues/31763#issuecomment-537226190 .

Через помилки або у VS Code, або в деклараціях типу конкретних пакетів, останні два пункти не завжди працюють. Це був мій випадок, я не бачив автоматичного імпорту реакції-завантаження в простому додатку Create-React-App. Нарешті це виправлено вручну, скопіювавши папку пакета з node_modules у node_modules / @ типи і залишивши там лише файли оголошень типу, наприклад Button.d.ts. Це не чудово, тому що якщо ви коли-небудь видалите папку node_modules, вона знову перестане працювати. Але я віддаю перевагу цьому, ніж завжди потрібно вручну вводити імпорт. Це була моя остання інстанція після спроб і невдач із цими методами:

  • Оновити код VS (v. 1.45.1)
  • Встановіть типи для вашого пакету, наприклад npm install --save @types/react-bootstrap
  • Додайте файл jsconfig.json і пограйте з налаштуваннями, як пропонували інші люди
  • Спробуйте всі плагіни для автоматичного імпорту

Сподіваюся, це комусь допоможе!


1

Якщо ви використовуєте angular, переконайтесь, що tsconfig.jsonпомилка не містить помилок. (у терміналі проблем)

Я чомусь подвоїв ці рядки, і у мене це не спрацювало

{
  "module": "esnext",
  "moduleResolution": "node",
}

0

Я зіткнувся з цією проблемою у Typescript версії 3.8.3.

Intellisense - найкраще, що ми могли мати, але для мене, здається, функція автоматичного імпорту теж не працює. Я спробував встановити розширення, хоча автоматичний імпорт не працював. Я перевірив усі налаштування, пов’язані з розширеннями. Нарешті, функція автоматичного імпорту запрацювала, коли я очистив кеш з

C: \ Users \ ім'я користувача \ AppData \ Roaming \ Code \ Cache

& перезавантажте VSCode

Примітка: AppData можуть бути видимими в імені користувача, лише якщо ви виберете "Показати (приховані елементи)" у меню ("Перегляд").

У деяких випадках ми можемо в кінцевому підсумку думати, що існує помилка, пов’язана з імпортом, тоді як насправді, несвідомо, ми можемо кодувати, використовуючи застарілі функції або API в angular.

Наприклад: якщо ви намагаєтесь закодувати щось подібне

конструктор (http: Http) {

// ...}

Де Http вже застарілий і замінений на HttpClient в новішій версії, тому ми можемо в кінцевому підсумку думати, що помилка, пов’язана з цим, може бути пов’язана з помилкою автоматичного імпорту. Для отримання додаткової інформації ви можете звернутися до застарілих API та функцій



0

Заповніть includeвластивість на першому рівні JSON-об’єкта приблизно tsconfig.editor.jsonтак:

"include": [
  "src/**/*.ts"
]

У мене це добре працює.

Також ви можете додати ще одне розширення файлу Typescript, якщо це потрібно, як тут:

"include": [
  "src/**/*.ts",
  "src/**/*.spec.ts",
  "src/**/*.d.ts"
]

-1

Виникла проблема з кодом Visual Studio, яку ви можете відстежувати та оцінювати непогано для цієї функції. Також виникла проблема з голосом користувача , але я вважаю, що вони перенесли голосування до питань GitHub.

Здається, вони хочуть функцію автоматичного імпорту в TypeScript, тому її можна використовувати повторно. Проблема автоматичного імпорту TypeScript для відстеження та великих пальців тут .


-1

Я використовую плагін 'ImportJS' від Devin Abbott для автоматичного імпорту, і ви можете встановити його, використовуючи код нижче

npm install --global import-js

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