2016-08-24 11 views
0

Я хочу, чтобы создать свою собственные типизации DefinitelyTyped для рейтинга проекта (https://github.com/maxcnunes/ranking)Как я должен сделать, чтобы создать свою собственные типизации DefinitelyTyped, которые имеют по умолчанию как класс

Я попробовать реализацию следующей ...

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' 

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

+0

Я думаю, что это не проблема с вашей типизацией, а не с процессом сборки. Можете ли вы добавить это, пожалуйста? –

+0

@SebastianSebald Я не знаю, что такое процесс сборки? –

+0

Поскольку ваш код должен быть переведен на JavaScript, я думаю, у вас есть какой-то процесс для этого. Или это ошибка, показанная в вашей среде IDE? –

ответ

1

Похоже Ranking это класс, так что я бы также определить его как таковой:

таможенно-типизации/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'. Для полного обсуждения разницы, я отсылаю вас к this github issue.

Также я ответил very similar question, вы можете проверить.

+0

Хорошо, это работа, спасибо вам;) –