Отдельное объявление TypeScript и реализация класса, такие как заголовки C ++ с использованием `.d.ts` - PullRequest
0 голосов
/ 17 февраля 2020

Возможно ли разделить объявление и реализацию классов TypeScript в пространстве имен в стиле, аналогичном тому, как в C ++? Я хочу, чтобы мои объекты TypeScript были отделены в стиле, аналогичном тому, как файлы заголовков C ++ используются только для объявления, а logi c реализован в отдельном файле. Моя цель в этом состоит в том, чтобы запутать логи моего модуля c и выставить объявление только тогда, когда другие загрузят мой модуль.

Чтобы запустить мой пример, я делаю следующее, используя код из моего тестового файла, расположенного ниже.

tsc
tsc Member.test.ts && node Member.test.js

Member.test.ts

import { MyNamspace} from "../dist/Member";

var member = new Made.Member();
member.say("Bam");

В Member.d.ts Я хочу объявить методы и свойства моего класса.

export declare namespace MyNamspace { 
    export class Member {
      firstName: string;

      constructor(firstName:string);

      getFirstName(): string;
      say(s: string): string;
  }  
}

Затем в Member.ts Я хочу реализовать эти методы. Первоначальная проблема, с которой я сталкиваюсь, заключается в том, что этот файл не знает о свойстве firstName из класса, который я объявил в Member.d.ts

namespace MyNamspace { 
  class Member {     
    constructor(firstName:string) {
      this.firstName = firstName;
    }
    public getFirstName(): string {
      return this.firstName;
    }
    public say(s: string): void {
      console.log(s + '\n');
    }
  }  
}
...