【问题标题】:How to create typescript definition file for external package which returns class如何为返回类的外部包创建打字稿定义文件
【发布时间】:2019-02-15 11:34:40
【问题描述】:

有一个不支持 typescript 的外部 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 包创建类型定义,因为我想在我的 typescript 项目中使用它,我刚开始学习 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 的包

【问题讨论】:

    标签: javascript node.js typescript ecmascript-5 type-definition


    【解决方案1】:

    您没有从声明的模块 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      • 2020-05-09
      相关资源
      最近更新 更多