Как ссылаться на типы Redux в файле определения машинного индекса index.d.ts? - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу создать файл index.d.ts, который ссылается на некоторые типы из популярного пакета NPM, известного как redux.

Вещи, которые я уже пробовал:

(вверху моего index.d.ts файла)

  1. /// <reference path="../../../node_modules/redux/index.d.ts" />

Это не работает.Я подозреваю, что это потому, что файл redux/index.d.ts вообще не объявляет пространство имен.Когда я редактирую redux/index.d.ts файл и оборачиваю все туда declare namespace Redux { ... }, все работает нормально.Я на redux@^4.0.0.

/// <reference types="redux" />

Это не сработает, если я не установлю пакет NPM @types/redux/@3.6.31, в котором есть старые устаревшие типы, которые не соответствуют опубликованным.Последняя версия пакета @types/redux является устаревшим заполнителем, который говорит об использовании официальных redux типов пакетов (которые не работают).

import { Middleware } from "redux";

Когда я помещал показанное выше выражение import в мой файл index.d.ts, каждое объявление в файле разрывалось (то есть в любом другом месте, где я зависел от своего собственногоФайл index.d.ts для типов перестал читать любые типы вообще из него.) Из того, что я прочитал, добавление оператора import к типу файла d.ts заставляет Typescript считать этот файл модулем, а не файлом определения.

Плохие (IMO) обходные пути, которые работают, но не совсем:

  1. Установка пакета NPM @types/redux@3.6.31 вместо последней устаревшей версии-заполнителя @types/redux.
  2. Редактирование моей копии node_modules/redux/index.d.ts для переноса всего в пространство имен, например, declare namespace Redux { ... }.

Другая информация:

Мой проект был загружен с create-react-app v2 какПроект JavaScript.Я просто использую d.ts файлы для документирования некоторых интерфейсов.Мой редактор - последняя / стабильная версия VSCode.

1 Ответ

0 голосов
/ 05 декабря 2018

Поскольку типскрипт 2.9 ( см. Раздел о типах импорта ), вы можете использовать import(), чтобы использовать файлы определения типа без фактического импорта самого модуля.Например, это определение будет работать с использованием типа Action из пакета redux:

declare function createCustomAction(): import("redux").Action

Нет необходимости ссылаться на что-либо сверху с директивой triple slash.

...