次の定義タイプファイルがあります。
// index.d.ts
declare module 'Transformer' {
class EditableElement {
constructor(target: SVGPoint);
}
export = EditableElement;
}
そして、EditableElement
をインポートしたいと思います。しかし、次の行を書くと:
import {EditableElement} from 'Transformer';
次のエラーが表示されます:
モジュール "Transformer"は非モジュールエンティティに解決され、この構成を使用してインポートできません。
EditableElement
クラスをインポートするにはどうすればよいですか?実はそのクラスを活用したいだけなのです。 import
ディレクティブがコードに付随的な影響を及ぼしたくありません。私はそれを使いたいだけです: '(
これはES6/CommonJSの相互運用に該当します。
私の推奨は、相互運用性に依存せず、代わりに古い構文を使用することです。
const EditableElement = require('Transformer')
Es6/es2015をターゲットにする必要がある場合は、次のことを実行できます。
import * as EditableElement from 'Transformer'
// with `allowSyntheticDefaultImport`
import EditableElement from 'Transformer'
更新:[email protected]がリリースされたため、import EditableElement from 'Transformer'
を直接実行できるようになりました。
tsconfig.json
でesModuleInterop
をオンにしてください
declare module
は、独自のTypeScriptモジュールでの使用が非推奨です。export
またはexport default
のいずれかを使用する必要があります。
export class EditableElement {
constructor(target: SVGPoint);
}
インポートには、import {EditableElement} from 'Transformer';
またはimport * as EditableElement from 'Transformer';
を使用できます
これを次のように考えたい。
シナリオ1-明示的なもののエクスポート/インポート(デフォルトのエクスポートではありません。そのため、インポート名を「{}」で囲む必要があります。
// Export (fileX)
export const something = 'hello world';
// Import (fileY)
import { something } from 'fileX';
シナリオ2-デフォルトをエクスポート/インポートします(これにより、インポート名を「{}」で囲む必要がなくなります)。選択した名前(以下の「何か」)は、インポートにアクセスするためのエイリアスになります。
// Export (fileX)
export default 'hello world';
// Import (fileY)
import something from 'fileY';
そのような参照パスはありますか?
/// <reference path="*/**/myModules.d.ts" />
import * as m from "SomeModule";