无法在 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
我正在将其导入到另一个文件中,没有任何问题,但在尝试导入 Faker 时,我收到了此错误。我已经尝试了一些应该解决这个问题的解决方案,例如修改 tsconfig 和 package.json 以添加 type: modules
或更改 tsconfig 中的 lib
和 target
但没有运气.
我应该注意这适用于硬编码值,但我需要使用 faker。
编辑:只是提到我已经尝试了 const/var faker = require('faker');
以及 import faker = require('faker')
这里是 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.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" 才能让您的代码正常工作。
我目前正在尝试将 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 中的 lib
和 target
但没有运气.
我应该注意这适用于硬编码值,但我需要使用 faker。
编辑:只是提到我已经尝试了 const/var faker = require('faker');
以及 import faker = require('faker')
这里是 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.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" 才能让您的代码正常工作。