[英]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 中的lib
和target
但沒有運氣。
我應該注意到這適用於硬編碼值,但我需要使用 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" 才能使代碼正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.