簡體   English   中英

無法在 TypeScript 中導入 NPM 包(例如 Faker)

[英]Can't import NPM Package (eg Faker) in TypeScript

我目前正在嘗試將 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錯誤: 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')

這是一個工作示例

您還必須安裝@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.json是更改tsconfig.json的以下行:

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

或者,在命令行中傳遞它:

ts-node -O '{"module": "commonjs"}' ./server/generate.ts > ./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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM