Как использовать response-datetime с реагировать + машинописный текст (внутри TSX)

react-datetime есть файл определения машинописи, но он не работает (для меня). Из того, что я вижу, файл определения ts экспортирует другой тип (ReactDatetime), чем то, что находится в реальном файле JavaScript (Datetime).

Я пошел вперед и изменился react-datetime.d.ts Файл typings для экспорта (что я думаю) является правильным типом (доступен в gist):

interface Datetime extends React.ComponentClass<DatetimepickerProps> {}
export { Datetime }

И TypeScript жалуется, что не может найти Datetime:

(26,10): error TS2304: Cannot find name 'Datetime'.

Я предполагаю, что есть что-то довольно простое, что я, должно быть, упускаю с точки зрения типирования и этого компонента Попытка заставить его работать с исходным файлом типографий привела к невозможности импортировать модуль в первую очередь, даже если react-datetime.d.ts файл был указан с помощью /// <reference path="../node_modules/react-datetime/react-datetime.d.ts" /> директивы.

Минималистичный пример того, как класс пытается использовать <Datetime/>:

/// <reference path="../../node_modules/react-datetime/react-datetime.d.ts" />
import * as React from "react";
import { Datetime } from "react-datetime";


export interface DateTimeResolutionProps { timestamp: number, resolution: number }
export class DateTimeResolutionPicker extends React.Component<DateTimeResolutionProps, {}> {
    render() {
        // console.log(Datetime);
        return (<div>
        <Datetime/>
        </div>);
    }

}

2 ответа

Решение

Вы должны импортировать его так же, как вы импортировали React модуль:

import * as Datetime from "react-datetime";

Тогда он не будет жаловаться, что не нашел Datetime,

Что касается имен, вы решаете, какое имя будет, оно может быть ReactDatetime если ты хочешь:

import * as ReactDatetime from "react-datetime";

То же самое происходит с React модуль, если вы посмотрите на файл определения, он покажет:

declare namespace __React {
    ...
}

declare module "react" {
    export = __React;
}

Вы экспортируете Datetime как тип, даже если компонент React должен быть значением (будь то SFC или класс). Вот почему ваша версия не работает.

Версия в репозитории в настоящее время определяет его как модуль CommonJS, что означает, что на данный момент он должен требоваться с CommonJS-совместимым синтаксисом:

import Datetime = require("react-datetime");
Другие вопросы по тегам