【问题标题】:Can't import NPM Package (eg Faker) in TypeScript无法在 TypeScript 中导入 NPM 包(例如 Faker)
【发布时间】:2020-06-12 05:01:25
【问题描述】:

我目前正在尝试将 Faker 导入我的项目中。

我有一个类似于以下的文件:

import * as faker from 'faker';

interface Test {
    FirstName: String,
    LastName: String
}

function create() {
    let account: Test = {
        FirstName: faker.name.firstName(),
        LastName: faker.name.lastName()
    }
}

当我运行这个时,我得到一个错误:SyntaxError: Cannot use import statement outside a module

我将它导入另一个文件没有任何问题,但在尝试导入 Faker 时我收到此错误。我尝试了一些应该解决此问题的解决方案,例如修改 tsconfig 和 package.json 以添加 type: modules 或更改 tsconfig 中的 libtarget 但没有运气。

我应该注意到这适用于硬编码值,但我需要使用 faker。

编辑:只是提到我尝试过const/var faker = require('faker'); 以及import faker = require('faker')

【问题讨论】:

  • 你试过var faker=require('faker');
  • 是的,我试过const/var faker = require('faker');import faker = require('faker')
  • 提供tsconfig.json文件

标签: javascript node.js typescript npm faker


【解决方案1】:

这是working example

您还必须安装 @types/faker 包才能获取类型定义。

import React, { Component } from 'react';
import { render } from 'react-dom';
import Hello from './Hello';
import './style.css';

import faker from 'faker';

interface AppProps { }
interface AppState {
  name: string;
}

class App extends Component<AppProps, AppState> {
  constructor(props) {
    super(props);
    this.state = {
      name: faker.name.firstName()
    };
  }

  render() {
    return (
      <div>
        <Hello name={this.state.name} />

      </div>
    );
  }
}

render(<App />, document.getElementById('root'));

这是tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react"
  },
  "include": [
    "src"
  ]
}

【讨论】:

  • 我使用了您在 tsconfig 中设置的一些值,它似乎已经解决了我遇到的问题。我猜我的初始设置缺少一些设置。谢谢!
【解决方案2】:

我遇到了同样的问题,并尝试了上述建议的解决方案,但没有成功。对我有用的是更改tsconfig.json 中的以下行:

//"module": "esnext", "module": "commonjs",

或者,在命令行中传递它:

ts-node -O '{"module": "commonjs"}' ./server/generate.ts &gt; ./server/database.json

解释[1]:

当前的 node.js 稳定版本不支持 ES 模块。此外,ts-node 没有必要的钩子到 node.js 来支持 ES 模块。您需要在 tsconfig.json 中设置 "module": "commonjs" 才能使代码正常工作。

[1]https://github.com/TypeStrong/ts-node#import-statements

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2020-11-15
    • 2018-06-08
    • 1970-01-01
    相关资源
    最近更新 更多