@ types / core- js для динамического c импорта "core-js / stable" - PullRequest
0 голосов
/ 03 августа 2020

Это то, что я делаю в своем index.js, чтобы не доставлять полифилы всем своим пользователям.

index. js

const renderApp = () => {
  ReactDOM.render(
    <App
      firebase={firebase}
    />
    ,document.getElementById("root") as HTMLElement
  );
};

/* ############################ */
/* #### CHECK FOR POLYFILL #### */
/* ############################ */

if (
  'fetch' in window &&
  'Intl' in window &&
  'URL' in window &&
  'Map' in window &&
  'forEach' in NodeList.prototype &&
  'startsWith' in String.prototype &&
  'endsWith' in String.prototype &&
  'includes' in String.prototype &&
  'includes' in Array.prototype &&
  'assign' in Object &&
  'entries' in Object &&
  'keys' in Object
) {
  renderApp();
} else {
  import(
    /* webpackChunkName: "core-js-stable" */
    /* webpackMode: "lazy" */
    'core-js/stable'                          // <---- DYNAMIC IMPORTED "core-js/stable"
  ).then(renderApp);
}

Но я Я получаю предупреждение "неявный любой тип" в динамическом c импорте для core-js/stable пакета. А поскольку я обычно работаю с флагом --noImplicitAny, мой проект так не компилируется.

enter image description here

The weird thing is that I have installed the @types/core-js package

введите описание изображения здесь

Почему Typescript не находит типы для пакета core- js?

ПРИМЕЧАНИЕ: Если я импортирую его с обычным import "core-js/stable" I не получить это предупреждение / ошибку.

Кроме того, если я динамически c импортирую только core-js без пути /stable, я не получаю никаких предупреждений / ошибок.

Мол, это нормально:

 import(
    /* webpackChunkName: "core-js-stable" */
    /* webpackMode: "lazy" */
    'core-js'
  ).then(renderApp);

tsconfig. json

{
  "compilerOptions": {
    "allowJs": true,
    "baseUrl": ".",
    "esModuleInterop": true,
    "jsx": "react",
    "module": "CommonJS",
    "sourceMap": true,
    "strictNullChecks": true,
    "target": "ES5",
    "paths": {
      "@src/*": ["./src/*"],
    }
  },
  "include": [
    "src/**/*"
  ]
}

1 Ответ

0 голосов
/ 03 августа 2020

Вот что я сделал, чтобы избавиться от ошибки / предупреждения.

Позаимствовал эту идею из документов Typescript:

https://www.typescriptlang.org/docs/handbook/namespaces.html#working -with-other- javascript -libraries

Я создал эту папку для внешних объявлений и index.d.ts файла

/types/ambient/index.d.ts

index.d.ts

declare module 'core-js/stable';

И на index.tsx вы должны ссылаться на файл d.ts, который вы создали, используя директиву triple sla sh.

index.tsx

/// <reference path="./types/ambient/index.d.ts"/>

(...) OTHER CODE

import(
  /* webpackChunkName: "core-js-stable" */
  /* webpackMode: "lazy" */
    'core-js/stable'
).then(renderApp);

Теперь все работает без ошибок / предупреждений.

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...