Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js TypeScript编译错误,导入带花括号的非默认接口_Node.js_Typescript_Typescript Typings - Fatal编程技术网

Node.js TypeScript编译错误,导入带花括号的非默认接口

Node.js TypeScript编译错误,导入带花括号的非默认接口,node.js,typescript,typescript-typings,Node.js,Typescript,Typescript Typings,编译我的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? 令人不快的是: impor

编译我的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";
问题是,在试图从中导入的键入文件中,DomeElement接口是一个非默认导出接口,如下所示:

export interface DomElement {
    attribs?: {[s: string]: string};
    children?: DomElement[];
    data?: any;
    name?: string;
    next?: DomElement;
    parent?: DomElement;
    prev?: DomElement;
    type?: string;
}
如果我取下花括号,它实际上会起作用,但这对我来说似乎有问题:

  • 我的印象是,只有默认导出才能在没有花括号的情况下导入。为什么需要导入而不需要花括号
  • 此问题出现在DefiniteTypted提供的
    节点模块
    文件夹中的类型定义中。我不想更改依赖项文件。Github中没有相关的开放问题,所以我认为它确实有效。事实上,它适用于使用旧版本Node(v8)的同事,但这似乎并没有什么不同
  • 版本:

    • Node.js-12.14.0
    • 列表项
    • TypeScript 3.7.2(也测试为不适用于3.7.4)
    • domhandler 2.4()的类型定义
    • domutils 1.7()的类型定义
    更新

    这是我的tsconfig.json:

    {
      "compilerOptions": {
        "module": "commonjs",
        "esModuleInterop": true,
        "target": "es6",
        "noImplicitAny": true,
        "moduleResolution": "node",
        "sourceMap": true,
        "outDir": "dist",
        "baseUrl": ".",
        "paths": {
          "*": [
            "node_modules/*"
          ]
        }
      },
      "include": [
        "src/**/*"
      ]
    }
    
    根据来自我的信息,我设法让它编译(并工作),尽管我不喜欢这个解决方案(因为它实际上关闭了对该模块的任何检查)

    我已经删除了打字以清理html(以及相关的domhandler等)。TSC抱怨它不知道“清理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
    

    使用
    sanitize html
    时遇到相同的问题,因为其依赖关系树是
    sanitize html
    ->
    htmlparser2
    ->
    domutils
    ->
    domhandler
    。在升级到节点12之前,配置(使用typescript 3.6.4)在节点8中工作。如果有多个版本的
    domutils
    ,请检查您的
    npm shrinkwrap.json
    package lock.json
    ?还有,哪些依赖项在哪个版本中引入了
    domutils