Имеет ли смысл использовать экспорт в файле d.ts? - PullRequest
2 голосов
/ 06 августа 2020

Я пытаюсь создать файл для типов, которые глобально используются в моем приложении.

reduxState.d.ts

declare namespace MyProject {
  type Type1 = someType;
  interface SomeInterface {
    someProperty: someType
  }
}

С код выше, я уже вижу свой namespace и его элементы, доступные в моих файлах проекта.

Итак, в чем разница между приведенным выше кодом и следующим кодом, который использует export для namespace members?

declare namespace MyProject {
  export type Type1 = someType;
  export interface SomeInterface {
    someProperty: someType
  }
}

Кажется, они оба работают нормально. В чем разница?

От: https://www.typescriptlang.org/docs/handbook/namespaces.html#namespacing

Потому что мы хотим, чтобы интерфейсы и классы здесь были видимы вне

В этом отрывке из DO C кажется, что они ссылаются на namespace, который объявлен в ts, а не файл d.ts. Поэтому в таком случае вам понадобится export?

Есть ли вообще смысл использовать export в файле d.ts?

1 Ответ

1 голос
/ 06 августа 2020

*.d.ts файлов предназначены для определения, они полностью игнорируются во время выполнения. Если вы пишете код JS, потому что у вас есть библиотека или что-то в этом роде, я настоятельно рекомендую использовать ключевое слово export, потому что это упрощает другим пользователям просмотр того, что они смогут использовать из вашего кода (то, что вы не используете 't export, очевидно, не может быть импортирован в другое место).

Теперь ваш вариант использования: все, что экспортируется из namepsace, можно использовать вне его независимо. Это означает, что вы можете сделать что-то вроде

const obj: MyProject.SomeInterface = { someProperty: 20 };

Поскольку вы используете файлы *.d.ts, а не файлы *.ts, это не будет иметь никакого значения для вас, пока вы экспортируете только интерфейсы, поскольку они в любом случае будет опущен во время компиляции.

Последнее замечание: файлы *.d.ts позволяют вам видеть свои материалы во всем проекте, но если вы планируете импортировать функции или аналогичные оттуда, вы необходимо сначала импортировать их.

...