将一个模块中的类型用于另一个模块

Use types from one module for another

我将 Babylonjs 与 Rollupjs 以及打字稿一起使用。

Babylonjs 在包中捆绑了打字,所以当我像这样导入它时:

import { ArcRotateCamera, Engine, SceneLoader, Vector3 } from "babylonjs";

我从打字稿中获得了所有的打字信息和类型检查,但是,由于(我认为)babylon.js 是如何捆绑的 - Rollup 无法捆绑它抛出错误:

1: import { ArcRotateCamera, Engine, SceneLoader, Vector3 } from "babylonjs";

2: import "babylonjs-loaders";

3: import React from "react";

Error: 'Engine' is not exported by node_modules/babylonjs/babylon.js

要修复汇总捆绑,我需要将导入更改为:

import { ArcRotateCamera, Engine, SceneLoader, Vector3 } from "babylonjs/es6";

但后来我丢失了所有输入信息...

所以我最快的解决方案是以某种方式指示打字稿 babylon.d.ts 也适用于 babylonjs/es6.js.

P.S 这些命名的导入都是正确的并且可以正常工作,因为当我将它与@storybook(使用 webpack 加载它)一起使用时组件可以工作。

您会注意到 babylonjs 模块是如何在 babylon.d.ts 中声明的:

declare module 'babylonjs' { 
    export = BABYLON; 
}
declare module BABYLON {
    // Many declarations...
}

要将相同的声明与 babylonjs/es6 模块名称相关联,您所要做的就是遵循相同的格式并将模块声明添加到项目中的新文件中:

declare module 'babylonjs/es6' { 
    export = BABYLON; 
}

(将此代码添加到另一个模块文件中将不起作用,因为那样它将被视为模块扩充而不是模块声明。)

考虑提交问题以在原始 babylonjs 包中进行此更改。