TypeScript - библиотека экспорта с «пространствами имен» - PullRequest
0 голосов
/ 25 октября 2018

Хорошо, например, у меня есть проект со следующей файловой структурой:

file structure

Пусть проект будет называться 'my-module'

I 'Я хотел бы импортировать эту библиотеку в другой проект, как это:

import { User, Home } from 'my-module/Models'
import { BaseWindow } from 'my-module/View'

Как я могу это сделать?Как подготовить файл .d.ts?

РЕДАКТИРОВАТЬ:

Проект

Содержимое вышеуказанных файлов просто, например:

interface IUser {
  name: string;
  age: number;
}

type UserOptions = IUser & {
  foo: string
}

class User implements IUser {
  private foo: string;
  name: string;
  age: number;
  constructor(options: UserOptions) {
    this.name = options.name;
    this.age = options.age;
    this.foo = options.foo;
  }
}

export { User, UserOptions };

1 Ответ

0 голосов
/ 26 октября 2018

Я предполагаю, что вы хотите в src/Models/index.ts:

export * from "./User";
export * from "./Home";

Затем, если вы правильно настроили разрешение модуля, вы можете написать:

import { User, UserOptions } from "my-module/Models";

иUser и UserOptions будут ссылаться на класс и псевдоним типа из src/Models/User.ts соответственно.Если src/Models/User.ts и src/Models/Home.ts объявляют символ с тем же именем, я полагаю, победит первый оператор export *.

Проблема с разрешением модуля

Если импорт my-module/ даетЕсли вы заполните src и dist, вам потребуется импортировать полный относительный путь к файлам .js и .d.ts (которые должны быть рядом друг с другом).Я предполагаю, что эти файлы находятся под dist.Если вам не нравится dist в вашем пути импорта, у вас есть несколько вариантов, ни один из которых не подходит:

  1. Не используйте каталоги src и dist;упорядочите все файлы, начиная с корня проекта.
  2. Используйте модуль Bunder или загрузчик, который вы можете настроить так, чтобы import "my-module/Models" смотрел в папке dist.Если ваш компоновщик или загрузчик еще не интегрируется с TypeScript, используйте параметры сопоставления путей TypeScript , чтобы поведение разрешения модуля TypeScript отражало поведение вашего компоновщика или загрузчика.
  3. Перенаправляйте каждый путь импорта по отдельности вправильные файлы в dist, вручную создавая пару файлов .js и .d.ts, которые импортируют реальные пути, или файл package.json с полями main и types, которые ссылаются на реальные пути.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...