voice icon indicating copy to clipboard operation
voice copied to clipboard

discordjs/voice TypeScript's definition "import" causes a TypeScript compilation error

Open TIRTAGT opened this issue 2 years ago • 1 comments

Issue description

Steps to reproduce the issue :

  • Install discordjs/voice via npm

    • npm install @discordjs/voice
  • Install discordjs/opus via npm

    • npm install @discordjs/opus
  • Install sodium via npm

    • npm install sodium
  • Verify that npm had installed these version of those packages :

    • @discordjs/voice v0.7.5
    • @discordjs/opus v0.5.3
    • sodium v3.0.2
  • Create a starting point for the bot (in a src folder), could be a simple ping and pong command

  • creates tsconfig.json with these contents :

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es2020",
        "jsx": "preserve",
        "strictFunctionTypes": true,
        "sourceMap": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "outDir": "./build",
        "rootDir": "./src",
        "typeRoots": [
            "./node_modules/@types",
            "./node_modules/discord.js/typings",
            "./node_modules/@discordjs/voice",
        ]
    },
    "exclude": [
		"./node_modules/@discordjs",
        "node_modules",
        "**/node_modules/*",
    ]
}

adjust the tsconfig's if you have different source and build folder.

  • Run typescript compilation

    • tsc -p tsconfig.json
  • Enjoy the error :

Module '"${ProjectPath}/node_modules/prism-media/typings/index"' has no default export.
- From : ${ProjectPath}/node_modules/@discordjs/voice/dist/index.d.ts, Line 2

Module '"${ProjectPath}/node_modules/@types/ws/index"' can only be default-imported using the 'esModuleInterop' flag
- From : ${ProjectPath}/node_modules/@discordjs/voice/dist/index.d.ts, Line 5

Code sample

${ProjectPath}/node_modules/@discordjs/voice/dist/index.d.ts, contents : 

import { Readable, ReadableOptions } from 'node:stream';
import prism from 'prism-media';
import { TypedEmitter } from 'tiny-typed-emitter';
import { GatewayVoiceServerUpdateDispatchData, GatewayVoiceStateUpdateDispatchData } from 'discord-api-types/v9';
import WebSocket, {MessageEvent} from 'ws';

@discordjs/voice version

0.7.5

Node.js version

v17.2.0

Operating system

Linux, BTW I use "linux 5.15.5.arch1-1" kernel

Priority this issue should have

Medium (should be fixed soon)

TIRTAGT avatar Dec 07 '21 11:12 TIRTAGT

Temporary fix I have currently, replace the ${ProjectPath}/node_modules/@discordjs/voice/dist/index.d.ts from line 1 to 6 with these :

import { Readable, ReadableOptions } from 'node:stream';
import * as prism from 'prism-media';
import { TypedEmitter } from 'tiny-typed-emitter';
import { GatewayVoiceServerUpdateDispatchData, GatewayVoiceStateUpdateDispatchData } from 'discord-api-types/v9';
import * as WebSocket from 'ws';
import { MessageEvent } from 'ws';

Differences between the original and my temporary fix :

import { Readable, ReadableOptions } from 'node:stream';
import prism from 'prism-media';      // - Original
import * as prism from 'prism-media'; // + Modified
import { TypedEmitter } from 'tiny-typed-emitter';
import { GatewayVoiceServerUpdateDispatchData, GatewayVoiceStateUpdateDispatchData } from 'discord-api-types/v9';
import WebSocket, {MessageEvent} from 'ws'; // - Original
import * as WebSocket from 'ws';            // + Modified
import { MessageEvent } from 'ws';          // + Modified

TIRTAGT avatar Dec 07 '21 11:12 TIRTAGT