You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 5项目引入无类型定义的dmn-js库的配置问题

在Angular 5中引入无类型定义的dmn-js库

嘿,我之前在Angular 5项目里折腾过无类型定义的第三方库,刚好也碰过dmn-js,给你分享一套亲测有效的方案:

首先,先确认你已经通过npm把dmn-js装到项目里了:

npm install dmn-js --save

接下来我们要完善src/typings.d.ts的类型声明——因为dmn-js没有官方的@types包,得手动告诉TypeScript这个库是合法的模块。

方案一:基础模块声明

在src/typings.d.ts里补充这段代码:

/* SystemJS module definition */
declare var module: NodeModule;
declare module 'dmn-js' {
  // 暂时用any过渡,后续可以根据实际用到的API补充更具体的类型
  const DmnJS: any;
  export default DmnJS;
}

interface NodeModule {
  id: string;
}

这样TypeScript就不会再报“找不到模块dmn-js”的错误了。

方案二:针对子模块的精准声明

如果你用到了dmn-js的具体子模块(比如dmn-js/lib/Viewer这类),可以在typings里更精准地声明:

declare module 'dmn-js/lib/Viewer' {
  class DmnViewer {
    constructor(options: { container: HTMLElement });
    importXML(xml: string, callback: (err: Error | null, warnings: any[]) => void): void;
    // 你用到什么方法就补充什么,不用一次性写全
  }
  export default DmnViewer;
}

这样在使用Viewer的时候,能获得一点点类型提示,比全用any舒服点。

配置脚本引入(关键步骤)

别忘在Angular的配置文件里引入dmn-js的UMD包:

  • 如果你用的是旧版angular-cli.json,找到scripts数组添加:
"scripts": [
  "../node_modules/dmn-js/dist/dmn-js.js"
]
  • 如果是新版angular.json,就在architect -> build -> options -> scripts里加同样的路径。

组件里的使用示例

配置完就可以在组件里正常用了,给你个简单的Viewer示例:

import DmnViewer from 'dmn-js/lib/Viewer';
import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';

@Component({
  selector: 'app-dmn-viewer',
  template: '<div #dmnContainer style="height: 600px;"></div>'
})
export class DmnViewerComponent implements OnInit {
  @ViewChild('dmnContainer') dmnContainer: ElementRef;
  private viewer: DmnViewer;

  ngOnInit() {
    this.viewer = new DmnViewer({
      container: this.dmnContainer.nativeElement
    });

    // 替换成你的DMN XML内容
    const dmnXml = '<your-dmn-xml-here>';
    this.viewer.importXML(dmnXml, (err, warnings) => {
      if (err) {
        console.error('加载DMN失败:', err);
      } else {
        console.log('DMN加载完成,警告信息:', warnings);
      }
    });
  }
}

小提醒

  • 暂时用any类型过渡完全没问题,等后续项目稳定了,再慢慢补充完整的类型声明就行。
  • 如果改完typings还是报错,记得重启一下Angular的开发服务器,让它重新识别类型文件。

内容的提问来源于stack exchange,提问作者indusBull

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:28:24