如何获取 lodash 类型信息以在 VSCode 中工作?

Posted

技术标签:

【中文标题】如何获取 lodash 类型信息以在 VSCode 中工作?【英文标题】:How can I get lodash type info to work in VSCode? 【发布时间】:2019-10-08 09:56:31 【问题描述】:

我在 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';

但后来我得到了原来的错误。

那么我需要更改哪些内容才能使其正常工作?

以下是详细信息:

package.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 设置

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

【问题讨论】:

【参考方案1】:

我有同样的问题,我通过这种方式解决了它:

const _ = require('lodash');

【讨论】:

我在尝试您的解决方案时遇到了另一个类型错误:const _ : _.LoDashStatic = require('lodash'); 修复了该问题。这似乎有点混乱,但它确实有效。 为什么需要_.LoDashStatic 类型声明? 没有类型我得到以下错误:Subsequent variable declarations must have the same type. Variable '_' must be of type 'LoDashStatic', but here has type 'any'. 你可以试试这个github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/… 我已经重新检查了,因为我的 tsconfig 已将 target 更改为 es2015 我可以像这样导入:import * as _ from 'lodash';

以上是关于如何获取 lodash 类型信息以在 VSCode 中工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 vscode 设置 jest typescript 测试以在调试模式下运行

如何获取 blob 类型的数据以在 oracle 中插入?

如何安装 lodash v3 Typescript 类型

无法禁用 VSCode 以在保存时删除结尾空格?

如何设置 webpack 以在 VS Code 中复制文件

如何使用 lodash 从复杂的对象数组中获取值?