web-dev-qa-db-ja.com

Typescript:importステートメントの一部ではないステートメントが必要

TypeScriptバージョン2.2.2

UserRoutzr.tsにこのrequireを書きました

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

TSLintは次の警告を生成しています:

require statement not part of an import statement

私がそれを変更した場合:

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

それからエラーが発生します:

TS1003 Identifier expected

これをどのように書き換える必要がありますか?フィードバックありがとう

12
user762579

TypeScriptモジュールは、ES6モジュールの実装です。 ES6モジュールは静的です。問題は、動的パスpath.join(process.cwd() + "/data")に由来します。コンパイラは、コンパイル時にどのモジュールであるかを判断できません。また、リンターはanyにつながる原因を嫌います。

モジュールへの静的パスを使用する必要があります。コンパイル時に、TypeScriptが解決します。そして、それは正しいエクスポートされたタイプ(IUser[])からusersへ。

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

注意:モジュールdataにデータのみが含まれる場合、ロード(Node.js)またはバンドル(Webpack)できるJSONファイルに変更することを検討できます。

更新(2019年5月から)— 動的インポート を使用することもできます。TypeScriptは静的および動的パスを受け入れます。

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

参照: TypeScript 2.4リリースノート

15
Paleo

動的モジュールの読み込み が必要な場合があり、次のようなコードがあります。

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