如何在打字稿中正确使用lodash-es?

Fre*_*ind 7 typescript lodash ts-node

我需要lodash-es在我的打字稿项目中使用,但是我无法正确配置它,它总是报告错误,例如SyntaxError: Unexpected identifier

你好

import upperCase from 'lodash-es/upperCase'

console.log('Hello ' + upperCase('typescript') + '!');
Run Code Online (Sandbox Code Playgroud)

package.json

{
  "scripts": {
    "demo": "ts-node hello.ts"
  },
  "dependencies": {
    "lodash-es": "4.17.11"
  },
  "devDependencies": {
    "@types/lodash-es": "4.17.1",
    "ts-node": "7.0.0",
    "typescript": "3.0.1"
  }
}
Run Code Online (Sandbox Code Playgroud)

tsconfig.json

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs"
  }
}
Run Code Online (Sandbox Code Playgroud)

运行时ts-node hello.ts,它将报告错误,例如:

/typescript-use-lodash-es-demo/node_modules/lodash-es/upperCase.js:1
    (function (exports, require, module, __filename, __dirname) { import createCompounder from './_createCompounder.js';
                                                                         ^^^^^^^^^^^^^^^^

    SyntaxError: Unexpected identifier
        at new Script (vm.js:79:7)
        at createScript (vm.js:251:10)
Run Code Online (Sandbox Code Playgroud)

我还针对此问题设置了一个小型演示,您可以根据需要克隆并尝试:https : //github.com/freewind-demos/typescript-use-lodash-es-demo

一个相关的问题是将lodash-es与babel一起使用:如何正确配置babel以使用lodash-es?。由于我不确定它们的原因完全相同,因此我在这里要求输入打字稿

ati*_*kan 7

您可以从这里加载类型:

npm install --save-dev @types/lodash-es
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

import { camelCase } from "lodash-es"
Run Code Online (Sandbox Code Playgroud)


Mat*_*hen 3

ts-node.ts在加载文件时对其进行编译。它不接触.js文件;它们要么必须是 Node.js 可以理解的形式(例如,没有 ES6import语句),要么必须使用单独的机制来转换它们,例如@babel/registerrequire 钩子(本质上与 所使用的东西相同babel-node)。您仍然需要配置@babel/register不忽略node_modules,如其他答案中所述。其他答案的建议是使用lodash而不是lodash-es很好。