node.js - Typescript: Hur använder jag "declare module" i node


Hur får jag declare module att fungera i Node, jag får TypeScript att kompileras utan fel och Intellisense i VS.Code fungerar. Men jag får "Kan inte hitta modul 'messages'" vid körning.

Klargörande: Jag försöker få både klasserna api.ts och mq.ts under samma "namespace" messages.

Jag har följande node-projektupplägg.

  • /meddelanden/api.ts
  • /messages/mq.ts
  • /main.ts

api.ts

declare module "messages" {
export class Put {

    }
}

mq.ts

declare module "messages"{
export class GetWork {

    }
}

main.ts

import * as messages from "messages";
let x = new messages.GetWork();

tsconfig.json

{
   "compilerOptions": {
      "target": "es6",
      "module": "commonjs"
   },
   "exclude": [  ]
}

jsconfig.json

{
   "compilerOptions": {
       "target": "ES6"
   }
}

Svar #1

I Node behöver du inte använda declare module, varje fil är bara en modul, declare module är för d.ts och annan användning.

I ditt fall, lägg bara till en index.ts under /messages-katalogen på detta sätt och ta bort declare module.

import * as M1 from "./M1";
import * as M2 from "./M2";

export {M1, M2};

Svar #2

Några saker här, eftersom du försöker importera meddelanden utan en relativ väg, med bara namnen, försöker TypeScript hitta en modul i en node_modules-mapp. Det är därför den inte kan hitta någon.

Så, om du vill importera en av dina egna moduler bör du använda en relativ sökväg.

Nu är varje fil en modul. Så om du har en fil som heter mq.ts bör du importera den på följande sätt:

import { Put } from './mq';

Syntaxen:

declare module "messages" {
  // ....
}

används endast när man skapar Typings för befintliga node_modules och vanligtvis skulle man skapa en .d.ts-fil för att göra det.

Här är dokumentationen om modulupplösning för TypeScript, det är en bra en.