Невозможно импортировать NPM пакет (например, Faker) в TypeScript - PullRequest
1 голос
/ 28 февраля 2020

Я сейчас пытаюсь импортировать 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 и пакета. json для добавления type: modules или изменения lib и target в tsconfig, но не повезло.

Я должен отметить, что это работает с жестко закодированными значениями, но мне нужно использовать фейкер.

Редактировать: просто упомянув, что я пробовал const/var faker = require('faker');, а также import faker = require('faker')

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

У меня возникла та же проблема, и я безуспешно попробовал предложенное выше решение. Что сработало для меня, так это изменение следующей строки в tsconfig.json:

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

Объяснение [1]:

Текущие node.js стабильные выпуски не поддерживают ES модули. Кроме того, ts-node не имеет необходимых хуков в node.js для поддержки модулей ES. Вам нужно установить "module": "common js" в вашем файле tsconfig. json, чтобы ваш код работал.

[1] https://github.com/TypeStrong/ts-node#import -состояния

0 голосов
/ 28 февраля 2020

Вот рабочий пример .

Вам также необходимо установить пакет @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"
  ]
}
...