Файл объявления машинописного текста для chessboardjs (неявный импорт)

Надеюсь создать несколько файлов объявлений для DefinitelyTyped (поэтому я хочу убедиться, что они высшего качества).

Следующая библиотека, за которую я берусь, это https://github.com/oakmac/chessboardjs/. У меня на самом деле это работает, если я импортирую его так

// WHAT WORKS
import * as ChessBoard from "chessboardjs";

и теперь я могу использовать библиотеку, позвонив

const board = ChessBoard('board1', 'start');

Проблема в том, что я хочу, чтобы оператор импорта был неявным (стиль ES6), и не знаю, как это сделать.

// WHAT I WOULD LIKE
import { ChessBoard } from "chessboardjs";

Я хотел бы получить некоторые рекомендации о том, как это сделать, если это возможно. Поскольку я все еще новичок в файлах машинописных текстов и объявлений, возможно, библиотека просто не создана для неявного импорта.

Это то, что у меня есть в файле index.d.ts

declare namespace ChessBoardJS {
    interface BoardConfig {
        onDrop?: Function;
        draggable?: boolean;
        onChange?: Function;
        onMoveEnd?: Function;
        onSnapEnd?: Function;
        sparePieces?: boolean;
        onDragMove?: Function;
        showNotation?: boolean;
        onDragStart?: Function;
        onSnapbackEnd?: Function;
        onMouseoutSquare?: Function;
        onMouseoverSquare?: Function;
        pieceTheme?: string | Function;
        orientation?: ChessBoardJS.Types.OrientationType;
        showErrors?: boolean | string | Function;
        moveSpeed?: number | ChessBoardJS.Types.SpeedType;
        snapSpeed?: number | ChessBoardJS.Types.SpeedType;
        trashSpeed?: number | ChessBoardJS.Types.SpeedType;
        dropOffBoard?: ChessBoardJS.Types.DropOffBoardType;
        appearSpeed?: number | ChessBoardJS.Types.SpeedType;
        snapbackSpeed?: number | ChessBoardJS.Types.SpeedType;
        position?: ChessBoardJS.Types.PositionType | string | object;
    }
}

declare namespace ChessBoardJS.Types {
    type PositionType = 'start';
    type PositionFenType = 'fen';
    type SpeedType = 'slow' | 'fast';
    type OrientationFlipType = 'flip';
    type OrientationType = 'white' | 'black';
    type DropOffBoardType = 'snapback' | 'trash';
}

interface ChessBoardInstance {
    clear(useAnimation?: boolean): void;
    destroy(): void;
    fen(): string;
    flip(): void;
    move(...args: string[]): object; // *FIND RETURN*
    position(newPosition: object | string | ChessBoardJS.Types.PositionType, useAnimation?: boolean): void
    position(fen?: ChessBoardJS.Types.PositionFenType): string | object;
    orientation(side?: ChessBoardJS.Types.OrientationType | ChessBoardJS.Types.OrientationFlipType): string;
    resize(): void;
    start(useAnimation?: boolean): void;
}

interface ChessBoardFactory {
    (containerElOrId: any, config: ChessBoardJS.BoardConfig): ChessBoardInstance
    fenToObj(fen: string): any;
    objToFen(obj: any): any;
}

declare var ChessBoard: ChessBoardFactory;
declare module "chessboardjs" {
    export = ChessBoard;
}

Спасибо!!!


person Bayo O    schedule 18.04.2017    source источник
comment
Эй, просто интересно - вы продвинулись дальше в типизации для этой библиотеки?   -  person Rikki Gibson    schedule 30.05.2017
comment
Думаю, да. Однако я еще не нажал его на определенно типизированный. Я могу поделиться им с вами в то же время, если вы также работаете над чем-то подобным   -  person Bayo O    schedule 04.06.2017
comment
Я работаю над чем-то, что значительно выиграет от набора текста для шахмат и шахматной доски. Вы можете связаться со мной по адресу rikkigibson в Gmail точка com. (Извините, не видел других способов передать контактную информацию.)   -  person Rikki Gibson    schedule 04.06.2017
comment
Нп. я буду иметь их в вашей электронной почте через несколько минут   -  person Bayo O    schedule 06.06.2017
comment
github.com/Sliver/angular-firebase-chess/tree/ master/src/ Вы также можете получить их здесь   -  person Bayo O    schedule 06.06.2017


Ответы (1)


Это не работает так. Файл определения описывает, как работает библиотека.

Этот

import * as ChessBoard from "chessboardjs"

и это

import ChessBoard from "chessboardjs"

и это

import { ChessBoard } from "chessboardjs"

каждый из них означает три совершенно разные вещи во время выполнения. Почти наверняка работает только один из них. Если у вас есть рабочий импорт, вы вообще не должны касаться файла определения. Он просто сломается во время выполнения.

person Ryan Cavanaugh    schedule 18.04.2017
comment
Спасибо, Райан. Как автор файла определения, я полагал, что у меня есть некоторая гибкость в том, как я его структурировал, поскольку в конце он описывает Lib. Прошу прощения за мою нубность, я все еще в режиме обучения. Можно ли предположить, что гибкость не распространяется на стили импорта/экспорта? - person Bayo O; 19.04.2017