перераспределение общих js типов как esm - PullRequest
0 голосов
/ 03 марта 2020

Я использую библиотеку напрямую через unpkg и пытаюсь заставить проверку типов работать во время разработки.

// src/modules/preact.js

// @ts-ignore
export * from "https://unpkg.com/preact@latest?module";

// @ts-ignore
export * from "https://unpkg.com/preact@latest/hooks/dist/hooks.module.js?module";

Поскольку TypeScript не может разрешить удаленные URL-адреса, я также установил копия библиотеки для разработки и добавленный файл декларации.

// src/modules/preact.d.ts

export * from "preact";
export * from "preact/hooks";

// node_modules/preact/src/index"' uses 'export =' and cannot be used with 'export *'. [2498]

Это не работает, потому что локальные типы экспортируют общие js, тогда как unpkg обслуживает esm.

// node_modules/preact/src/index.d.ts

export = preact;
export as namespace preact;
import { JSXInternal } from './jsx';
declare namespace preact {

// ...

Есть ли способ превратить общий js в es в файле декларации?

Сейчас я использую реэкспорт вручную в качестве обходного пути:

// src/modules/preact.d.ts

import * as preact from "preact";
import * as hooks from "preact/hooks";

export let h: typeof preact.h;
export let render: typeof preact.render;
export let Fragment: typeof preact.Fragment;
export let createContext: typeof preact.createContext;

export let useEffect: typeof hooks.useEffect;
export let useRef: typeof hooks.useRef;
export let useState: typeof hooks.useState;
export let useReducer: typeof hooks.useReducer;
export let useMemo: typeof hooks.useMemo;
export let useCallback: typeof hooks.useCallback;

В идеале я мог бы выполнить сопоставление непосредственно в paths в моем tsconfig, но это ограничивает совместимость модулей таким же образом (без обходного пути, который я могу найти).

{
  "compilerOptions": {
    "target": "esnext",
    "noEmit": true,
    "allowJs": true,
    "checkJs": true,
    "baseUrl": ".",
    "paths": {
      "https://unpkg.com/preact@latest?module": ["node_modules/preact/src/index.d.ts"],
      "https://unpkg.com/preact@latest/hooks/dist/hooks.module.js?module": ["node_modules/preact/hooks/src/index.d.ts"]
    }
  },
  "include": [
    "**/*.d.ts",
    "**/*.js",
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...