Я пытаюсь описать нашу существующую инфраструктуру / библиотеку 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) для обоих проектов.