использование библиотеки компонентов React без @types

#reactjs #typescript

#reactjs #typescript

Вопрос:

Я разрабатываю React с помощью TypeScript

Что я хочу сделать, так это использовать библиотеку компонентов React без определения @types.

Я бы хотел использовать эту библиотеку
https://github.com/react-component/calendar

В моем коде React я написал, как показано ниже

 import * as React from "react";
import * as ReactDOM from "react-dom";
import Calendar from 'rc-calendar';

ReactDOM.render(<Calendar />, document.getElementById('content'));
  

но я получаю ошибку:

 ERROR in ./index.tsx
(4,22): error TS2307: Cannot find module 'rc-calendar'.
  

Я предполагаю, что это потому, что нет определения типа, но в библиотеке выше, похоже, нет файла определения типа для typescript.
Как я мог бы использовать такую библиотеку с TypeScript?

Комментарии:

1. Javascript в Typescript без определения совершенно законен. Вы уверены, что эта библиотека есть у вас node_modules и она включена в webpack (если вы ее используете)?

Ответ №1:

В TypeScript 2.1, если вы не используете --noImplicitAny , вы сможете просто использовать эту библиотеку без файлов объявлений (при условии, что она установлена).

Но поскольку TS 2.1 еще не выпущен, что вы можете сделать, так это создать файл с именем externals.d.ts со следующим содержимым:

 declare module "rc-calendar";
  

Это в основном говорит TypeScript «эй, эта штука существует, перестань меня доставать, и я хочу использовать ее так, как я хочу».

Вы также можете придать ей немного лучшую форму.

 declare module "rc-calendar" {
    declare var calendar: any;
    export default calendar;
}
  

Теперь эта вещь может быть импортирована только как импорт по умолчанию.

Вы можете продолжать уточнять эту вещь, пока она не станет достаточно подробной.

Комментарии:

1. Спасибо, я смог успешно ее скомпилировать

2. Я понимаю, что это старый ответ, но это похоже на взлом. Поскольку при импорте компонента, подобного этому, не используются его типы реквизитов. Таким образом, реквизиты должны быть созданы вручную для этого, без проверки типа.