web-dev-qa-db-ja.com

TypeScriptコンパイルエラー、中括弧を含むデフォルト以外のインターフェースのインポート

TypeScriptプロジェクトをコンパイルすると、コンパイラーが次のエラーをスローします。

node_modules/@types/domutils/index.d.ts:6:10 - error TS2614: Module '"../../domhandler/lib"' has no exported member 'DomElement'. Did you mean to use 'import DomElement from "../../domhandler/lib"' instead?

問題のある行は次のとおりです。

import { DomElement } from "domhandler";

問題は、インポート元のタイピングファイルで、DomElementインターフェイスがデフォルトではないエクスポートされたインターフェイスであることです。

export interface DomElement {
    attribs?: {[s: string]: string};
    children?: DomElement[];
    data?: any;
    name?: string;
    next?: DomElement;
    parent?: DomElement;
    prev?: DomElement;
    type?: string;
}

中かっこを削除すると実際には機能しますが、それは私には問題があるようです:

  1. 中括弧なしでインポートできるのはデフォルトのエクスポートだけであるという印象を受けました。中かっこなしでこのインポートが必要なのはなぜですか?
  2. この問題は、DefinitelyTypedによって提供されるnode-modulesフォルダーのタイプ定義で発生しています。依存関係ファイルを変更したくありません。 Githubには関連する未解決の問題はないため、問題なく動作すると思います。実際、これは古いバージョンのNode(v8)を使用している同僚でも機能しますが、違いがあるようには見えません。

バージョン:

[〜#〜]更新[〜#〜]

ここに私のtsconfig.jsonがあります:

{
  "compilerOptions": {
    "module": "commonjs",
    "esModuleInterop": true,
    "target": "es6",
    "noImplicitAny": true,
    "moduleResolution": "node",
    "sourceMap": true,
    "outDir": "dist",
    "baseUrl": ".",
    "paths": {
      "*": [
        "node_modules/*"
      ]
    }
  },
  "include": [
    "src/**/*"
  ]
}
5
joshua miller

GitHubのaluanhaddad からの情報に基づいて、私はそれをコンパイル(および動作)させることができましたが、解決策は好きではありません(そのモジュールのチェックを実際にオフにしているため)。

Sanitize-html(および関連するdomhandlerなど)のタイピングを削除しました。 TSCは「sanitize-html」モジュールを認識していないと叫んでいるので、srcフォルダー内にダミーモジュール宣言を追加しました。

src/sanitize-html.d.ts

declare module 'sanitize-html';

tsconfig.json

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "noImplicitAny": true,
    "removeComments": true,
    "preserveConstEnums": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true
  },
  "lib": [
    "es6",
    "dom"
  ],
  "include": [
    "src/**/*",
    "index.ts"
  ],
  "exclude": [
    "**/*.spec.ts"
  ]
}

ビルドコマンド:

tsc
1
Sielu