Как описать существующую библиотеку JS с несколькими файлами d.ts и экспортировать ее с помощью NPM - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь описать нашу существующую инфраструктуру / библиотеку JS с помощью файлов d.ts, чтобы мы могли использовать Intellisense и JSDoc в нашем внешнем проекте, на который ссылается инфраструктура. Каркас экспортируется как пакет NPM.

У меня есть следующий файл, определенный как мой "typings" в package.json:

// ./src/index.d.ts
export = System;

declare namespace System {
    export class Greeter {
        greeting: string;

        constructor(params?: Greeter.Params = {});

        greet(): string;
    }

    declare namespace Greeter {
        export interface Params {
            greeting: string;
        }
    }
}

Во внешнем интерфейсе, после локальной установки пакета npm test-framework, я могу импортировать и использовать его следующим образом, с полными комментариями Intellisense и JSDoc, показывающими:

import * as System from 'test-framework';

var t = new System.Greeter();
t.greet();

Теперь я хотел бы отделить все мои файлы d.ts. Таким образом, я думал, что смогу импортировать их в файл index.d.ts и повторно экспортировать их в соответствующие пространства имен. Я перепробовал все варианты импорта / экспорта, которые смог найти. Основываясь на документации файла декларации TS , я бы предположил, что должно работать следующее:

// ./src/index.d.ts
export = System;

declare namespace System {
    export { default as Greeter } from './test/greeter.d';
}


// ./src/test/greeter.d.ts
export class Greeter {
    greeting: string;

    constructor(params?: Greeter.Params = {});

    greet(): string;
}

declare namespace Greeter {
    export interface Params {
        greeting: string;
    }
}

export = Greeter;

Хотя импортированный System будет иметь свойство Greeter, он не распознает никакой дополнительной информации о типах.

Есть ли способ сделать что-то похожее на вышеприведенную работу, или я должен сделать это совершенно другим способом? Большинство решений похожих проблем, которые я нашел до сих пор, касается либо двух проектов TS, либо одного проекта TS. В идеале мы могли бы продолжать использовать JS (ES6) для обоих проектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...