Typescript : require statement not part of an import statement

和自甴很熟 提交于 2020-02-27 04:31:04

问题


Typescript version 2.2.2

I wrote this require in my UserRoutzr.ts

const users = <IUser[]> require(path.join(process.cwd() + "/data"));

TSLint is raising the following warning:

require statement not part of an import statement

if I changed it to :

import users = <IUser[]> require(path.join(process.cwd() + "/data"));

Then it's raising an error :

TS1003 Identifier expected

How should I rewrite this require ? thanks for feedback


回答1:


TypeScript modules are an implementation of ES6 modules. ES6 modules are static. Your issue comes from the dynamic path: path.join(process.cwd() + "/data"). The compiler can't determine which module it is at compile time, and the linter doesn't like the causes that lead to any.

You should use a static path to the module. At compile time, TypeScript resolves it. And it affects the right exported type (IUser[]) to users.

import users = require("./yourModuleThatExportsUsers");

Notice: If your module data contains just data, you could consider to change it to a JSON file, which could be loaded (Node.js) or bundled (Webpack).

UPDATE (from May 2019) — It is also possible to use dynamic import, with which TypeScript accepts static and dynamic paths:

const users = await import("./yourModuleThatExportsUsers");

See also: TypeScript 2.4 Release Notes




回答2:


may be you need dynamic module loading, and the code like this:

import {IUser} from './lib/user';
const users:IUser[] = require(path.join(process.cwd() + "/data"));


来源:https://stackoverflow.com/questions/43112619/typescript-require-statement-not-part-of-an-import-statement

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!