How can I extend Module declarations exported from @types/node?

515 Views Asked by At

@types/node doesn't offer types for private properties (prefixed with _) so I'd like to create a .d.ts file that types these properties:

The closest I have gotten is creating a module.d.ts like this:

declare namespace NodeJS {
    interface Module {
        _compile(code: string, filename: string): string;
    }
}

declare module 'module' {   
    const _extensions: NodeJS.RequireExtensions;
    export { _extensions };

    export function _resolveFilename(filename: string, module: any): string;
}

However, this conflicts with @types/node/module.d.ts:

@types/node/module.d.ts:109:5 - error TS2309: An export assignment cannot be used in a module with other exported elements.

109     export = Module;
        ~~~~~~~~~~~~~~~~
1

There are 1 best solutions below

0
Cheng Dicky On BEST ANSWER

How about export const _extensions: NodeJS.RequireExtensions?

Here is the completed code

// module.d.ts
import Module from "module";
declare global {
    namespace NodeJS {
        export interface Module {
            _compile(code: string, filename: string): string;
        }
    }
}
declare module 'module' {
    export const _extensions: NodeJS.RequireExtensions
    export function _resolveFilename(filename: string, module: any): string;
}

Also I have tried your _compile declaration and it seems that it doesn't work without wrapping in global in my end.

Here is the playground