Ошибка компиляции 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. Эта проблема возникает в определениях типов в папке node-modules, как указано в DefinentyTyped. Я не хочу изменять файл зависимостей. В 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/**/*"
  ]
}

person joshua miller    schedule 24.12.2019    source источник
comment
Та же проблема возникает при использовании sanitize-html в качестве дерева зависимостей sanitize-html - ›htmlparser2 -› domutils - ›domhandler. Конфигурация (с машинописным текстом 3.6.4) работала в узле 8 до обновления до узла 12.   -  person sceee    schedule 27.12.2019
comment
Не могли бы вы проверить свой npm-shrinkwrap.json или package-lock.json, есть ли там несколько версий domutils? А также, какие зависимости используются domutils в каких версиях?   -  person sceee    schedule 27.12.2019


Ответы (1)


На основании информации из aluanhaddad на GitHub мне удалось его скомпилировать ( и работает), хотя решение мне не нравится (потому что оно фактически отключает любую проверку для этого модуля).

Я удалил типизацию для 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
person Sielu    schedule 27.02.2020