Как мне сделать, чтобы создать свои собственные Typings DefinitelyTyped, которые по умолчанию имеют класс

Я хочу создать свой собственный проект Typings DefinitelyTyped for Ranking (https://github.com/maxcnunes/ranking )

Я попробовал некоторую реализацию после...

declare module 'ranking' {
  interface RankingPlayer {
    position: number
    score: number
    playerId: any
  }

  interface Ranking {
    maxScore: number
    branchFactor: number
    players: any
    find(query);
    findOne(query);
    setScore(player: RankingPlayer);
    addPlayerPoints(player: RankingPlayer);
  }

  interface RankingStatic {
    (config: any): Ranking;
  }

  var ranking: RankingStatic;

  export = ranking;
}

Когда я пытаюсь с кодом

import Ranking from 'ranking'
...
console.log(Ranking) // This out '[Function: Ranking]'
const ranking = new Ranking({}) // This Error 'Cannot call a class as a function'

Поэтому я пытаюсь снова со следующими кодами...

declare module 'ranking' {
  interface RankingPlayer {
    position: number
    score: number
    playerId: any
  }

  export default class Ranking {
    maxScore: number
    branchFactor: number
    players: any
    constructor(config: any)
    find(query)
    findOne(query)
    setScore(player: RankingPlayer)
    addPlayerPoints(player: RankingPlayer)
  }
}

И попробуй с кодом

import Ranking from 'ranking'
...
console.log(Ranking) // This out 'undefined'
const ranking = new Ranking({}) // This Error 'ranking_1.default is not a constructor'

Не знаю, что нужно сделать, чтобы реализовать это :(


person Ittipon Teerapruettikulchai    schedule 24.08.2016    source источник
comment
Я думаю, что это не проблема вашего набора текста, а не вашего процесса сборки. Можете ли вы добавить это, пожалуйста?   -  person Sebastian Sebald    schedule 24.08.2016
comment
@SebastianSebald Я не знаю, что такое процесс сборки?   -  person Ittipon Teerapruettikulchai    schedule 24.08.2016
comment
Поскольку вам нужно преобразовать код TypeScript в JavaScript, я думаю, у вас есть какой-то процесс для этого. Или ошибка отображается в вашей среде IDE?   -  person Sebastian Sebald    schedule 24.08.2016


Ответы (1)


Кажется, что Ranking — это класс, поэтому я бы также определил его как таковой:

custom-typings/ranking.d.ts

declare module 'ranking' {
  class Ranking {
    constructor(options?: {})
  }
  export = Ranking
}

Затем вы можете просто назвать это так:

app.ts

import Ranking = require('ranking');
const ranking = new Ranking({
  maxScore: 1000000,
  branchFactor: 1000
});

Обратите внимание на использование import Ranking = require('ranking') вместо import Ranking from 'ranking'. Для полного обсуждения разницы я отсылаю вас к этой проблеме github.

Также я ответил на очень похожий вопрос, вы может захотеть проверить.

person Pelle Jacobs    schedule 24.08.2016