如何为未类型化的 npm 模块制作一组自定义的 d.ts 文件?

How can I make a custom set of d.ts files for an untyped npm module?

我需要根据需要自定义现有的 @types/three。 我在 src/typingsnpm rm @types/three 中克隆了整个 @types/threetsconfig.json 同时查看 node_modules/@typessrc/typings

但是,声明模块没有解析为'three'。

这里是 typings/three/index.d.ts:

export * from "./three-core";

export * from "./three-canvasrenderer";
export * from "./three-colladaLoader";
export * from "./three-copyshader";
export * from "./three-css3drenderer";
export * from "./three-ctmloader";
export * from "./three-ddsloader";
export * from "./three-editorcontrols";
export * from "./three-effectcomposer";
export * from "./three-examples";
export * from "./three-fbxloader";
export * from "./three-FirstPersonControls";
export * from "./three-maskpass";
export * from "./three-mtlloader";
export * from "./three-objloader";
export * from "./three-octree";
export * from "./three-orbitcontrols";
export * from "./three-orthographictrackballcontrols";
export * from "./three-outlinepass";
export * from "./three-projector";
export * from "./three-renderpass";
export * from "./three-shaderpass";
export * from "./three-smaapass";
export * from "./three-trackballcontrols";
export * from "./three-transformcontrols";
export * from "./three-vrcontrols";
export * from "./three-vreffect";

// export * from "./three-gltfloader";

export declare module 'three';
// [ts] 'export' modifier cannot be applied to ambient modules and module augmentations since they are always visible.    
// AND
// [ts] Invalid module name in augmentation. Module 'three' resolves to an untyped module at '/Users/abc_user/Desktop/abc_project/node_modules/three/build/three.js', which cannot be augmented.

// export as namespace THREE;
// This has no errors but does not resolve to 'three, meaning when I import * as THREE from 'three', ts says no declaration file exists.

所以问题是:如何为未类型化的 npm 模块制作一组自定义的 d.ts 文件?

好吧,您已经了解了其中的大部分内容。您很可能还没有完成的是更新您的 tsconfig。您需要明确设置打字稿编译器可以在何处找到您自己的打字。

将此添加到您的 tsconfig.json:

    "paths": {
        "*": [
            "node_modules/*",
            "src/typings/*"
        ]
    },