Как создать файл определения машинописи для внешнего пакета, который возвращает класс - PullRequest
0 голосов
/ 15 февраля 2019

Существует внешний пакет npm, который не поддерживает машинописный текст:

const ClassA = class ClassA {
  constructor(options) {
    this.test = options => this.client(options)
    .then(ClassA._validateAddress.bind({
      ...options,
      address: this.address
    }))
    this.someMethod = options => this.test(options);

    ClassA._validateOptions(options);
    ClassA._validateAddress(options.address);

    this.address = options.address;
    this.log = options.log || console;
    this.client = otherPackage.defaults({
      defaultAddress: this.address,
      returns: true
    });
  }

  static _validateOptions(options) {
    if (!options) {
      throw new Error('test error')
    }
    if (!isObject(options)) {
      throw new Error('options is not an object');
    }

    function isObject(value) {
      const type = typeof value
      return value !== null && (type === 'object' || type === 'function')
    }
  }
}

module.exports = ClassA

Я создаю что-то подобное в моем проекте TypeScript (все еще в JS, будет преобразован в TS):

const ClassA = require('package-without-ts')

const myClient = class ClassB extends ClassA {
  constructor(options) {
    super(...arguments)

    this.customMethod = options => Object.assign(options, {
      test: true
    })
  }
}


const options = {
  a: 1,
  b: 2
}
const client = new myClient(options);

Как создать определение типа для пакета ClassA, так как я хочу использовать его в своем проекте машинописи, я только начал изучать TS, так что мне немного сложно понять

Я пытался извлечькласс или интерфейсы в стиле TS для .d.ts файла, но у меня ничего не работает

/// <reference types="node" />


interface IOptions {
  address: string,
  log: object,
}

declare module 'package-without-ts' {
  class ClassA {
    public options: object
    constructor (options: IOptions) {
    }
  }
}

Я ожидаю, что мой проект TS будет работать с пакетом, который не поддерживает TS

1 Ответ

0 голосов
/ 15 февраля 2019

Вы ничего не экспортировали из объявленного модуля package-without-ts.

Изменить на

declare module 'package-without-ts' {
  class ClassA {
    public options: object
    constructor (options: IOptions) // {} in your code is invalid
  }

  export = ClassA // special syntax for commonjs style export
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...