Как я могу заставить информацию о типе lodash работать в VSCode?

Я получаю сообщение об ошибке (волнистая красная линия) в VSCode со следующим файлом .ts:

src\lib\hi.ts

import * as _ from 'lodash';

function testLodash(): void {

  function square(n: number) {
    return n * n;
  }

  return _.map([4, 8], square);
}

Ошибка

Property 'map' does not exist on type 'typeof import("lodash")'.ts(2339)

Я получаю ту же ошибку для любой из обычных функций lodash. Intellisense дает мне класс Lodash только при вызове через _.. Я предполагаю, что VSCode не может найти определения моего типа, но я не понимаю, почему.

Если я изменю импорт на:

import 'lodash';

Я получаю ожидаемые функции, и ошибка исчезает, но я получаю новую ошибку:

'_' refers to a UMD global, but the current file is a module. Consider adding an import instead.ts(2686)

Применение предложенного QuickFix добавляет к импорту следующее:

import _ from 'lodash';

Но затем я получаю исходную ошибку обратно.

Итак, что мне нужно изменить, чтобы это заработало?

Вот подробности:

пакет.json

{
  ...
  "dependencies": {
    ...
    "lodash": "^4.17.11",
    ...
  },
  "devDependencies": {
    ...
    "@types/lodash": "^4.14.130",
    ...
    "typescript": "^3.4.5"
  }
}

tsconfig.json

{
  "compilerOptions": {
     "target": "es5",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
    "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
    "allowJs": true,                       /* Allow javascript files to be compiled. */
    "outDir": "./dist/",                        /* Redirect output structure to the directory. */
    "strict": true,                           /* Enable all strict type-checking options. */
    "esModuleInterop": true                   /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
  }
}

Настройки VSCode

Нет нестандартных настроек TS

ТС версия

Версия 3.4.5

Версия VSCode

Version: 1.34.0 (user setup)
Commit: a622c65b2c713c890fcf4fbf07cf34049d5fe758
Date: 2019-05-15T21:59:37.030Z
Electron: 3.1.8
Chrome: 66.0.3359.181
Node.js: 10.2.0
V8: 6.6.346.32
OS: Windows_NT x64 10.0.17134

Установленные расширения

alanz.vscode-hie-server
alefragnani.Bookmarks
andyyaldoo.vscode-json
christian-kohler.path-intellisense
daiyy.quick-html-previewer
eamodio.gitlens
Edka.haskutil
esbenp.prettier-vscode
fabiospampinato.vscode-todo-plus
flowtype.flow-for-vscode
gcazaciuc.vscode-flow-ide
hoovercj.haskell-linter
jcanero.hoogle-vscode
justusadam.language-haskell
karigari.chat
mrmlnc.vscode-duplicate
ms-vscode.vscode-typescript-tslint-plugin
ms-vsliveshare.vsliveshare
ms-vsliveshare.vsliveshare-audio
ms-vsliveshare.vsliveshare-pack
phoityne.phoityne-vscode
SirTobi.code-clip-ring
WakaTime.vscode-wakatime
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
2
0
2 524
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У меня такая же проблема, и я справляюсь с ней следующим образом:

const _ = require('lodash');

Я получил другую ошибку типа, когда попробовал ваше решение: const _ : _.LoDashStatic = require('lodash'); исправил это. Это кажется немного запутанным, но это работает.

John Walker 22.05.2019 08:41

Зачем вам нужно объявление типа _.LoDashStatic?

Scofjeld 22.05.2019 08:42

без типа я получил следующую ошибку: Subsequent variable declarations must have the same type. Variable '_' must be of type 'LoDashStatic', but here has type 'any'.

John Walker 22.05.2019 08:48

Можете ли вы попробовать это github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types‌​/…

Scofjeld 22.05.2019 09:00

Я перепроверил, так как мой tsconfig изменился target на es2015 я могу импортировать так: import * as _ from 'lodash';

Scofjeld 22.05.2019 09:08

У меня все еще возникает та же проблема с target, установленным на es2015. Единственное решение, работающее для меня, по-прежнему: const _ : _.LoDashStatic = require('lodash');

John Walker 22.05.2019 22:17

Другие вопросы по теме